Server IP : 172.67.216.182 / Your IP : 162.158.108.134 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/php/82/src/ext/opcache/jit/ |
Upload File : |
/* ** This file has been pre-processed with DynASM. ** https://luajit.org/dynasm.html ** DynASM version 1.5.0, DynASM x64 version 1.5.0 ** DO NOT EDIT! The original file is in "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc". */ #line 1 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" /* * +----------------------------------------------------------------------+ * | Zend JIT | * +----------------------------------------------------------------------+ * | Copyright (c) The PHP Group | * +----------------------------------------------------------------------+ * | This source file is subject to version 3.01 of the PHP license, | * | that is bundled with this package in the file LICENSE, and is | * | available through the world-wide-web at the following url: | * | https://www.php.net/license/3_01.txt | * | If you did not receive a copy of the PHP license and are unable to | * | obtain it through the world-wide-web, please send a note to | * | [email protected] so we can mail you a copy immediately. | * +----------------------------------------------------------------------+ * | Authors: Dmitry Stogov <[email protected]> | * | Xinchen Hui <[email protected]> | * +----------------------------------------------------------------------+ */ //|.if X64 //|.arch x64 #if DASM_VERSION != 10500 #error "Version mismatch between DynASM and included encoding engine" #endif #line 22 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //|.arch x86 //|.endif //|.if X64WIN //|.define FP, r14 //|.define IP, r15 //|.define IPl, r15d //|.define RX, r15 // the same as VM IP reused as a general purpose reg //|.define CARG1, rcx // x64/POSIX C call arguments. //|.define CARG2, rdx //|.define CARG3, r8 //|.define CARG4, r9 //|.define CARG1d, ecx //|.define CARG2d, edx //|.define CARG3d, r8d //|.define CARG4d, r9d //|.define FCARG1a, CARG1 // Simulate x86 fastcall. //|.define FCARG2a, CARG2 //|.define FCARG1d, CARG1d //|.define FCARG2d, CARG2d //|.define SPAD, 0x58 // padding for CPU stack alignment //|.define NR_SPAD, 0x58 // padding for CPU stack alignment //|.define T3, [r4+0x50] // Used to store old value of IP //|.define T2, [r4+0x48] // Used to store old value of FP //|.define T1, [r4+0x40] //|.define A6, [r4+0x28] // preallocated slot for 6-th argument //|.define A5, [r4+0x20] // preallocated slot for 5-th argument //|.elif X64 //|.define FP, r14 //|.define IP, r15 //|.define IPl, r15d //|.define RX, r15 // the same as VM IP reused as a general purpose reg //|.define CARG1, rdi // x64/POSIX C call arguments. //|.define CARG2, rsi //|.define CARG3, rdx //|.define CARG4, rcx //|.define CARG5, r8 //|.define CARG6, r9 //|.define CARG1d, edi //|.define CARG2d, esi //|.define CARG3d, edx //|.define CARG4d, ecx //|.define CARG5d, r8d //|.define CARG6d, r9d //|.define FCARG1a, CARG1 // Simulate x86 fastcall. //|.define FCARG2a, CARG2 //|.define FCARG1d, CARG1d //|.define FCARG2d, CARG2d //|.define SPAD, 0x18 // padding for CPU stack alignment //|.define NR_SPAD, 0x28 // padding for CPU stack alignment //|.define T3, [r4+0x20] // Used to store old value of IP (CALL VM only) //|.define T2, [r4+0x18] // Used to store old value of FP (CALL VM only) //|.define T1, [r4] //|.else //|.define FP, esi //|.define IP, edi //|.define IPl, edi //|.define RX, edi // the same as VM IP reused as a general purpose reg //|.define FCARG1a, ecx // x86 fastcall arguments. //|.define FCARG2a, edx //|.define FCARG1d, ecx //|.define FCARG2d, edx //|.define SPAD, 0x1c // padding for CPU stack alignment //|.define NR_SPAD, 0x1c // padding for CPU stack alignment //|.define T3, [r4+0x18] // Used to store old value of IP (CALL VM only) //|.define T2, [r4+0x14] // Used to store old value of FP (CALL VM only) //|.define T1, [r4] //|.define A4, [r4+0xC] // preallocated slots for arguments of "cdecl" functions (intersect with T1) //|.define A3, [r4+0x8] //|.define A2, [r4+0x4] //|.define A1, [r4] //|.endif //|.define HYBRID_SPAD, 16 // padding for stack alignment #ifdef _WIN64 # define TMP_ZVAL_OFFSET 0x20 #else # define TMP_ZVAL_OFFSET 0 #endif #define DASM_ALIGNMENT 16 /* According to x86 and x86_64 ABI, CPU stack has to be 16 byte aligned to * guarantee proper alignment of 128-bit SSE data allocated on stack. * With broken alignment any execution of SSE code, including calls to * memcpy() and others, may lead to crash. */ const char* zend_reg_name[] = { #if defined(__x86_64__) || defined(_M_X64) "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15" #else "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7" #endif }; /* Simulate x86 fastcall */ #ifdef _WIN64 # define ZREG_FCARG1 ZREG_RCX # define ZREG_FCARG2 ZREG_RDX #elif defined(__x86_64__) # define ZREG_FCARG1 ZREG_RDI # define ZREG_FCARG2 ZREG_RSI #else # define ZREG_FCARG1 ZREG_RCX # define ZREG_FCARG2 ZREG_RDX #endif //|.type EX, zend_execute_data, FP #define Dt1(_V) (int)(ptrdiff_t)&(((zend_execute_data *)0)_V) #line 137 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.type OP, zend_op #define Dt2(_V) (int)(ptrdiff_t)&(((zend_op *)0)_V) #line 138 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.type ZVAL, zval #define Dt3(_V) (int)(ptrdiff_t)&(((zval *)0)_V) #line 139 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.actionlist dasm_actions static const unsigned char dasm_actions[8399] = { 77,139,190,233,255,248,10,255,77,137,190,233,255,198,4,37,237,0,255,72,184, 237,237,198,0,0,255,128,60,37,237,0,255,72,184,237,237,128,56,0,255,15,132, 244,247,255,232,243,255,72,199,192,237,255,72,184,237,237,255,252,255,208, 255,248,1,255,76,137,252,247,255,72,131,60,37,237,0,255,72,184,237,237,72, 131,56,0,255,76,139,52,37,237,255,72,184,237,237,76,139,48,255,72,131,196, 16,255,65,252,255,39,255,72,139,135,233,252,255,32,255,72,131,196,24,255, 76,139,116,36,24,76,139,124,36,32,72,131,196,40,72,199,192,1,0,0,0,195,255, 248,11,255,252,233,243,255,252,255,224,255,76,139,116,36,24,76,139,124,36, 32,72,131,196,40,133,192,15,140,244,247,72,199,192,1,0,0,0,248,1,195,255, 248,12,255,72,139,4,37,237,255,72,184,237,237,72,139,0,255,252,246,128,233, 235,15,132,244,247,139,128,233,65,199,132,253,6,233,237,248,1,252,233,244, 11,255,248,13,65,252,246,135,233,235,15,132,244,247,65,139,135,233,65,199, 132,253,6,233,237,248,1,65,252,246,135,233,235,15,132,244,255,65,139,135, 233,76,1,252,240,255,64,252,246,128,253,240,11,233,235,15,133,244,247,254, 1,64,252,246,128,253,240,11,233,235,15,132,244,250,255,72,139,184,253,240, 3,233,131,47,1,255,15,133,244,249,255,15,133,244,250,255,73,199,134,233,237, 255,72,184,237,237,73,137,134,233,255,252,233,244,250,255,248,3,255,64,128, 184,253,240,11,233,235,15,133,244,247,255,72,139,184,253,240,3,233,248,1, 255,252,247,71,4,237,15,133,244,250,255,252,233,244,250,254,0,248,4,255,248, 9,65,252,246,135,233,235,15,132,244,255,65,139,135,233,76,1,252,240,255,248, 9,252,233,244,11,255,248,14,255,76,139,60,37,237,255,72,184,237,237,76,139, 56,255,248,15,65,139,190,233,255,252,247,199,237,15,133,244,247,255,76,137, 252,246,76,139,116,36,24,76,139,124,36,32,72,131,196,40,255,248,16,255,65, 128,191,233,235,15,132,244,251,255,76,137,60,37,237,255,72,184,237,237,76, 137,56,255,248,5,255,73,199,199,237,255,73,191,237,237,255,73,191,237,237, 77,137,190,233,255,76,137,252,255,255,73,139,190,233,255,72,137,60,37,237, 255,72,184,237,237,72,137,56,255,76,139,116,36,24,76,139,124,36,32,72,131, 196,40,72,199,192,2,0,0,0,195,255,248,17,77,139,190,233,65,128,191,233,235, 15,132,244,247,255,248,18,73,139,134,233,139,136,233,65,199,132,253,15,233, 237,77,59,190,233,15,132,244,247,73,139,142,233,73,137,143,233,77,137,190, 233,248,1,73,137,199,139,184,233,255,65,128,191,233,235,15,133,244,255,65, 139,135,233,76,1,252,240,255,248,19,255,252,233,244,20,255,248,20,255,248, 21,255,252,233,244,22,255,248,22,255,248,23,255,252,233,244,24,255,248,24, 72,131,252,236,8,73,139,134,233,128,184,233,235,15,132,244,247,139,128,233, 65,199,132,253,6,233,237,248,1,72,49,252,255,255,72,199,198,237,255,72,190, 237,237,255,72,131,196,8,195,255,248,25,73,139,134,233,72,49,252,255,255, 72,99,144,233,72,139,20,16,72,129,194,239,255,248,26,77,139,190,233,255,72, 199,199,237,255,72,191,237,237,255,252,233,244,13,255,248,27,77,139,190,233, 255,248,28,73,139,134,233,139,128,233,65,199,132,253,6,233,237,72,49,252, 255,255,248,29,0,0,0,0,0,0,252,240,63,255,248,30,255,248,31,255,72,252,255, 0,73,139,134,233,73,139,150,233,72,139,128,233,72,252,255,130,233,252,255, 160,233,255,248,32,102,199,2,236,76,137,252,247,255,76,137,252,254,255,73, 139,182,233,255,252,243,15,30,252,250,255,73,139,134,233,72,139,136,233,72, 139,145,233,102,129,42,238,15,142,244,32,255,76,137,252,250,255,73,139,150, 233,255,72,43,144,233,255,72,193,252,250,2,252,255,164,253,17,233,255,248, 33,255,248,34,255,248,35,102,199,2,236,76,137,252,247,255,133,192,15,140, 244,247,255,73,139,134,233,72,139,136,233,72,139,137,233,73,139,148,253,15, 233,102,129,42,238,15,142,244,35,65,252,255,36,15,255,248,36,255,248,37,255, 248,38,255,248,39,255,72,131,196,24,77,49,252,255,195,255,76,139,116,36,24, 76,139,124,36,32,72,131,196,40,72,199,192,252,255,252,255,252,255,252,255, 195,255,248,40,72,129,252,236,239,76,137,188,253,36,233,76,137,156,253,36, 233,76,137,148,253,36,233,76,137,140,253,36,233,76,137,132,253,36,233,72, 137,188,253,36,233,72,137,180,253,36,233,72,137,148,253,36,233,72,137,140, 253,36,233,72,137,132,253,36,233,72,139,188,253,36,233,72,137,230,252,242, 68,15,17,188,253,36,233,252,242,68,15,17,180,253,36,233,252,242,68,15,17, 172,253,36,233,252,242,68,15,17,164,253,36,233,252,242,68,15,17,156,253,36, 233,252,242,68,15,17,148,253,36,233,255,252,242,68,15,17,140,253,36,233,252, 242,68,15,17,132,253,36,233,252,242,15,17,188,253,36,233,252,242,15,17,180, 253,36,233,252,242,15,17,172,253,36,233,252,242,15,17,164,253,36,233,252, 242,15,17,156,253,36,233,252,242,15,17,148,253,36,233,252,242,15,17,140,253, 36,233,252,242,15,17,132,253,36,233,255,72,129,196,239,255,133,192,15,133, 244,247,255,248,1,15,140,244,39,255,15,133,244,10,255,73,139,134,233,72,139, 128,233,72,139,128,233,65,252,255,36,7,255,72,131,196,24,73,139,134,233,72, 139,128,233,72,139,128,233,65,252,255,36,7,255,77,139,190,233,76,137,252, 247,73,139,134,233,72,139,128,233,72,139,128,233,65,252,255,20,7,133,192, 15,140,244,39,76,139,116,36,24,76,139,124,36,32,72,131,196,40,72,199,192, 1,0,0,0,195,255,248,41,255,106,235,252,235,235,255,106,235,72,129,4,253,36, 239,252,233,244,40,255,248,42,88,255,72,131,196,24,65,252,255,39,255,76,137, 252,247,73,139,6,76,139,116,36,24,76,139,124,36,32,72,131,196,40,252,255, 32,255,248,43,72,131,252,236,8,255,248,44,72,131,252,236,8,255,248,45,72, 131,252,236,8,255,248,46,72,131,252,236,8,255,248,47,72,131,252,236,8,255, 204,255,250,15,255,72,131,252,236,16,255,72,131,252,236,24,255,72,131,252, 236,40,76,137,116,36,24,76,137,124,36,32,73,137,252,254,255,73,199,135,233, 0,0,0,0,255,73,139,134,233,73,137,135,233,255,73,129,199,239,255,73,129,134, 233,239,255,15,133,243,255,252,233,244,10,254,0,15,132,245,252,233,243,255, 252,233,245,255,15,133,244,11,255,15,133,244,12,255,80,255,199,4,37,237,237, 255,72,184,237,237,199,0,237,255,72,184,240,34,237,237,64,199,128,253,240, 11,233,237,255,249,254,0,15,132,243,252,233,243,255,252,233,244,41,255,76, 137,252,247,73,139,134,233,72,139,128,233,72,139,128,233,65,252,255,20,7, 255,72,199,192,2,0,0,0,255,65,128,190,233,235,15,133,243,255,65,128,190,233, 235,15,131,243,255,72,49,192,240,131,240,35,255,72,184,240,34,237,237,255, 72,199,192,240,35,237,255,72,139,128,253,240,131,240,3,233,255,72,137,192, 240,131,240,35,255,252,247,135,233,237,15,132,243,255,252,247,135,233,237, 15,133,243,255,72,185,237,237,72,131,57,0,255,72,185,237,237,76,139,49,255, 73,129,252,255,239,15,132,244,39,255,77,133,252,255,15,132,244,39,255,133, 192,15,140,244,39,255,252,233,244,39,255,65,129,252,255,239,255,65,129,190, 233,239,255,76,137,252,247,76,139,116,36,24,76,139,124,36,32,72,131,196,40, 255,15,133,245,255,232,244,42,255,15,132,245,232,244,42,255,72,137,128,253, 240,131,240,3,233,255,196,225,120,40,192,240,133,240,45,255,64,15,40,192, 240,132,240,52,255,196,225,252,251,17,128,253,240,133,240,5,233,255,252,242, 64,15,17,128,253,240,132,240,20,233,255,197,252,251,16,4,240,132,37,237,255, 252,242,64,15,16,4,240,140,37,237,255,197,252,251,16,0,240,132,255,252,242, 64,15,16,0,240,140,255,196,225,123,16,128,253,240,133,240,13,233,255,252, 242,64,15,16,128,253,240,132,240,20,233,255,64,252,246,128,253,240,11,233, 235,15,132,244,248,255,72,139,128,253,240,3,233,131,0,1,248,2,255,252,233, 244,41,248,1,255,72,199,192,240,35,0,0,0,0,255,72,199,128,253,240,3,233,0, 0,0,0,255,64,199,128,253,240,11,233,0,0,224,195,255,64,199,128,253,240,11, 233,0,0,0,128,255,72,199,192,240,35,252,255,252,255,252,255,252,255,255,72, 199,128,253,240,3,233,252,255,252,255,252,255,252,255,255,64,199,128,253, 240,11,233,252,255,252,255,252,255,127,255,64,199,128,253,240,11,233,0,0, 224,67,255,64,252,246,128,253,240,11,233,235,15,132,244,247,255,72,139,136, 253,240,3,233,131,1,1,248,1,255,64,139,128,253,240,131,240,19,233,255,64, 137,128,253,240,131,240,19,233,255,132,252,237,15,132,244,247,255,131,2,1, 248,1,255,252,247,128,233,237,15,132,244,247,72,137,199,255,64,128,184,253, 240,11,233,235,15,133,244,248,255,72,129,128,253,240,3,233,239,255,72,129, 192,240,35,239,255,72,129,168,253,240,3,233,239,255,72,129,232,240,35,239, 255,15,128,243,255,15,128,244,247,255,72,137,192,240,35,255,72,137,128,253, 240,3,233,255,252,233,244,249,254,0,64,128,184,253,240,11,233,235,15,133, 244,248,191,237,255,72,141,184,253,240,3,233,255,72,137,199,240,131,255,128, 191,233,235,15,133,244,248,72,139,63,72,131,191,233,0,15,132,244,247,255, 72,141,176,253,240,3,233,255,72,137,198,240,131,255,72,49,252,246,255,252, 233,244,249,248,1,72,141,191,233,248,2,255,132,228,15,132,244,247,255,197, 252,251,240,160,88,5,240,132,244,29,255,252,242,64,15,88,5,240,140,244,29, 255,197,252,251,240,160,92,5,240,132,244,29,255,252,242,64,15,92,5,240,140, 244,29,255,72,141,132,253,240,131,0,240,68,240,36,233,255,72,1,192,240,131, 240,35,255,72,193,224,240,35,235,255,72,193,232,240,35,235,255,72,141,128, 253,240,131,240,3,233,255,72,41,192,240,131,240,35,255,72,15,175,192,240, 132,240,36,255,72,9,192,240,131,240,35,255,72,33,192,240,131,240,35,255,72, 184,240,34,237,237,72,1,192,240,131,240,35,255,72,3,128,253,240,131,240,3, 233,255,72,184,240,34,237,237,72,41,192,240,131,240,35,255,72,43,128,253, 240,131,240,3,233,255,72,184,240,34,237,237,72,15,175,192,240,132,240,36, 255,72,105,192,240,131,240,35,239,255,72,15,175,128,253,240,132,240,4,233, 255,72,184,240,34,237,237,72,9,192,240,131,240,35,255,72,129,200,240,35,239, 255,72,11,128,253,240,131,240,3,233,255,72,184,240,34,237,237,72,33,192,240, 131,240,35,255,72,129,224,240,35,239,255,72,35,128,253,240,131,240,3,233, 255,72,184,240,34,237,237,72,49,192,240,131,240,35,255,72,129,252,240,240, 35,239,255,72,51,128,253,240,131,240,3,233,255,15,129,243,255,15,129,244, 247,255,102,72,15,110,192,240,132,240,36,255,196,225,120,240,160,87,192,240, 133,240,45,255,64,15,87,192,240,132,240,52,255,196,225,120,240,160,87,192, 240,133,240,45,196,225,252,251,240,160,42,192,240,133,240,37,255,64,15,87, 192,240,132,240,52,252,242,72,15,42,192,240,132,240,36,255,196,225,120,240, 160,87,192,240,133,240,45,196,225,252,251,240,160,42,128,253,240,133,240, 5,233,255,64,15,87,192,240,132,240,52,252,242,72,15,42,128,253,240,132,240, 4,233,255,196,225,123,240,160,88,192,240,133,240,45,255,196,225,123,240,160, 92,192,240,133,240,45,255,196,225,123,240,160,89,192,240,133,240,45,255,196, 225,123,240,160,94,192,240,133,240,45,255,252,242,64,15,88,192,240,132,240, 52,255,252,242,64,15,92,192,240,132,240,52,255,252,242,64,15,89,192,240,132, 240,52,255,252,242,64,15,94,192,240,132,240,52,255,252,233,244,248,254,0, 197,252,251,240,160,88,4,240,132,37,237,255,72,185,237,237,197,252,251,240, 160,88,1,240,132,255,196,225,123,240,160,88,128,253,240,133,240,13,233,255, 197,252,251,240,160,92,4,240,132,37,237,255,72,185,237,237,197,252,251,240, 160,92,1,240,132,255,196,225,123,240,160,92,128,253,240,133,240,13,233,255, 197,252,251,240,160,89,4,240,132,37,237,255,72,185,237,237,197,252,251,240, 160,89,1,240,132,255,196,225,123,240,160,89,128,253,240,133,240,13,233,255, 197,252,251,240,160,94,4,240,132,37,237,255,72,185,237,237,197,252,251,240, 160,94,1,240,132,255,196,225,123,240,160,94,128,253,240,133,240,13,233,255, 252,242,64,15,88,4,240,140,37,237,255,72,185,237,237,252,242,64,15,88,1,240, 140,255,252,242,64,15,88,128,253,240,132,240,20,233,255,252,242,64,15,92, 4,240,140,37,237,255,72,185,237,237,252,242,64,15,92,1,240,140,255,252,242, 64,15,92,128,253,240,132,240,20,233,255,252,242,64,15,89,4,240,140,37,237, 255,72,185,237,237,252,242,64,15,89,1,240,140,255,252,242,64,15,89,128,253, 240,132,240,20,233,255,252,242,64,15,94,4,240,140,37,237,255,72,185,237,237, 252,242,64,15,94,1,240,140,255,252,242,64,15,94,128,253,240,132,240,20,233, 255,72,184,237,237,197,252,251,240,160,88,0,240,132,255,72,184,237,237,197, 252,251,240,160,92,0,240,132,255,72,184,237,237,197,252,251,240,160,89,0, 240,132,255,72,184,237,237,197,252,251,240,160,94,0,240,132,255,72,184,237, 237,252,242,64,15,88,0,240,140,255,72,184,237,237,252,242,64,15,92,0,240, 140,255,72,184,237,237,252,242,64,15,89,0,240,140,255,72,184,237,237,252, 242,64,15,94,0,240,140,255,64,128,184,253,240,11,233,235,15,133,244,249,255, 64,128,184,253,240,11,233,235,15,133,244,252,255,64,128,184,253,240,11,233, 235,15,133,244,247,254,1,252,233,244,251,254,0,252,233,244,251,255,248,6, 255,72,199,194,237,255,72,186,237,237,255,72,141,144,253,240,3,233,255,72, 137,194,240,131,255,15,133,244,14,255,252,233,244,5,254,0,72,137,198,255, 252,233,244,26,255,72,129,252,249,239,15,131,244,247,254,1,248,1,72,131,252, 249,0,72,199,192,240,35,0,0,0,0,15,143,244,247,255,252,233,244,26,254,0,72, 211,224,240,35,248,1,255,72,193,252,248,240,35,235,255,248,1,72,131,252,249, 0,72,199,193,237,15,143,244,247,255,248,1,72,211,252,248,240,35,255,252,233, 244,27,255,72,137,4,36,255,72,137,4,240,131,36,255,72,153,72,252,247,252, 248,240,35,255,72,139,4,36,255,72,139,4,240,131,36,255,72,131,184,253,240, 3,233,0,255,72,133,192,240,131,240,35,255,15,132,244,247,254,1,252,233,244, 27,254,0,72,131,184,253,240,3,233,252,255,255,72,131,252,248,240,35,252,255, 255,72,153,255,72,252,247,184,253,240,3,233,255,252,247,135,233,237,15,132, 244,250,255,139,135,233,255,72,133,192,255,72,129,252,248,239,255,72,57,252, 240,255,15,134,243,255,15,134,244,255,255,15,134,244,253,255,15,134,244,248, 255,72,139,135,233,255,72,129,192,239,255,72,137,252,240,72,193,224,4,72, 3,135,233,255,15,132,244,255,255,252,233,244,255,255,128,184,233,235,15,133, 244,254,255,128,184,233,235,15,132,243,255,128,184,233,235,15,132,244,253, 255,128,184,233,235,15,132,244,248,255,252,233,244,253,255,252,233,244,248, 255,232,244,19,255,232,244,20,255,64,199,128,253,240,11,233,237,252,233,244, 255,255,248,2,248,4,255,15,133,244,254,252,233,243,254,0,252,233,244,254, 255,128,190,233,235,15,142,244,247,254,1,252,233,244,247,254,0,15,132,244, 248,254,1,232,244,21,255,232,244,22,255,128,184,233,235,15,133,244,247,72, 139,0,72,129,192,239,248,1,255,128,184,233,235,255,15,142,243,255,15,143, 243,255,15,142,244,255,255,15,133,244,254,252,233,244,255,255,72,133,192, 15,133,244,254,252,233,244,255,255,72,199,128,253,240,3,233,237,255,72,184, 240,34,237,237,64,131,128,253,240,11,233,1,255,131,4,37,237,1,255,72,184, 240,34,237,237,64,131,128,253,240,11,233,2,255,131,4,37,237,2,255,64,128, 184,253,240,11,233,235,15,132,244,247,254,1,72,137,60,36,255,72,184,240,34, 237,237,73,137,134,253,240,131,233,255,72,133,192,15,132,244,12,255,72,139, 60,36,255,252,233,244,249,255,128,186,233,235,15,133,244,247,72,139,18,72, 129,194,239,248,1,255,72,139,144,253,240,3,233,131,42,1,255,132,228,15,132, 244,249,255,64,252,247,192,240,43,237,15,132,244,249,255,252,233,244,249, 248,2,255,132,228,15,132,244,248,255,64,252,247,192,240,43,237,15,132,244, 248,255,72,139,128,253,240,131,240,3,233,64,131,128,253,240,11,233,1,248, 2,255,72,137,215,255,72,49,252,246,49,210,72,49,201,77,49,192,255,132,252, 246,15,132,244,247,255,64,131,128,253,240,11,233,1,248,1,255,64,131,128,253, 240,11,233,2,248,1,255,72,131,191,233,0,15,133,244,248,254,1,15,132,244,254, 252,233,244,11,255,64,128,184,253,240,11,233,235,15,132,243,255,232,244,43, 252,233,244,255,254,0,232,244,44,255,232,244,43,255,232,244,45,255,232,244, 46,255,232,244,47,255,248,9,255,64,128,184,253,240,11,233,235,15,133,244, 249,72,139,184,253,240,3,233,255,72,141,135,253,240,131,233,248,3,255,248, 4,252,247,71,4,237,15,133,244,254,255,248,8,255,64,252,246,128,253,240,11, 233,235,15,132,244,251,255,72,139,184,253,240,3,233,131,47,1,252,247,71,4, 237,15,133,244,251,255,72,139,128,253,240,131,240,3,233,64,131,168,253,240, 11,233,1,255,128,191,233,235,15,133,244,247,72,139,55,128,190,233,235,15, 133,244,248,72,141,190,233,252,233,244,249,254,1,72,133,192,72,137,199,15, 133,244,247,252,233,244,12,254,0,64,128,184,253,240,11,233,235,15,133,244, 253,255,131,56,1,15,134,244,248,255,248,2,72,137,199,255,131,63,1,255,15, 135,244,247,254,1,64,252,246,128,253,240,11,233,235,15,132,244,247,131,47, 1,248,1,255,64,199,128,253,240,11,233,237,72,137,199,255,64,128,184,253,240, 11,233,235,15,143,244,253,255,72,133,192,15,132,244,247,254,1,232,244,23, 255,232,244,24,255,248,7,255,64,128,184,253,240,11,233,235,15,143,244,248, 255,64,199,128,253,240,11,233,237,72,137,199,252,233,244,6,248,2,255,72,49, 201,255,72,199,193,237,255,72,185,237,237,255,72,141,136,253,240,3,233,255, 72,137,193,240,131,255,128,184,233,235,15,133,243,255,128,184,233,235,15, 133,244,247,72,139,56,72,131,191,233,0,15,133,244,248,72,141,135,233,254, 1,128,191,233,235,15,133,244,247,72,139,63,72,131,191,233,0,15,133,244,248, 72,129,199,239,254,1,72,184,237,237,72,57,192,240,35,255,72,129,252,248,240, 35,239,255,72,59,128,253,240,131,240,3,233,255,72,57,192,240,131,240,35,255, 72,184,237,237,72,57,128,253,240,3,233,255,72,129,184,253,240,3,233,239,255, 15,148,208,255,15,149,208,255,15,159,208,255,15,156,208,255,15,157,208,255, 15,158,208,255,15,182,192,141,128,233,255,64,137,128,253,240,11,233,255,15, 132,245,255,15,142,245,255,15,141,243,255,15,141,245,255,15,140,243,255,15, 140,245,255,15,143,245,255,15,182,192,131,192,2,255,15,133,243,15,138,243, 255,15,133,245,15,138,245,255,15,138,244,247,255,15,138,244,247,15,132,245, 248,1,255,15,134,245,255,15,131,243,15,138,243,255,15,131,245,15,138,245, 255,15,130,243,255,15,130,245,255,15,135,243,15,138,243,255,15,135,245,15, 138,245,255,15,138,244,247,15,132,243,248,1,255,15,135,243,255,15,135,245, 255,15,131,245,255,64,199,128,253,240,11,233,237,15,133,245,15,138,245,255, 64,199,128,253,240,11,233,237,15,132,245,248,1,255,64,199,128,253,240,11, 233,237,15,134,245,255,64,199,128,253,240,11,233,237,15,131,245,15,138,245, 255,64,199,128,253,240,11,233,237,15,130,245,255,64,199,128,253,240,11,233, 237,15,135,245,15,138,245,255,15,151,208,15,182,192,141,128,233,255,64,137, 128,253,240,11,233,15,135,245,255,64,199,128,253,240,11,233,237,15,130,245, 248,1,255,15,147,208,15,182,192,141,128,233,255,64,137,128,253,240,11,233, 15,131,245,255,64,199,128,253,240,11,233,237,15,134,245,248,1,255,15,138, 244,247,184,237,15,132,244,248,248,1,184,237,248,2,255,15,151,208,15,182, 192,131,192,2,255,15,138,244,247,184,237,15,130,244,248,248,1,184,237,248, 2,255,15,147,208,15,182,192,131,192,2,255,15,138,244,247,184,237,15,134,244, 248,248,1,184,237,248,2,255,197,252,249,46,4,240,132,37,237,255,102,64,15, 46,4,240,140,37,237,255,197,252,249,46,0,240,132,255,102,64,15,46,0,240,140, 255,196,225,121,46,128,253,240,133,240,13,233,255,102,64,15,46,128,253,240, 132,240,20,233,255,196,225,121,46,192,240,133,240,45,255,102,64,15,46,192, 240,132,240,52,255,64,128,184,253,240,11,233,235,15,133,244,250,255,64,128, 184,253,240,11,233,235,15,133,244,255,255,64,128,184,253,240,11,233,235,15, 133,244,249,254,1,252,233,244,252,254,0,64,128,184,253,240,11,233,235,15, 133,244,251,255,252,233,244,252,255,128,191,233,235,15,133,244,247,72,199, 199,237,255,64,128,184,253,240,11,233,235,15,133,244,247,72,137,60,36,72, 199,199,237,255,252,233,244,248,248,1,255,128,191,233,235,15,132,244,247, 254,1,128,190,233,235,15,132,244,247,254,1,72,137,60,36,191,237,255,128,191, 233,235,15,133,244,247,72,139,63,72,129,199,239,248,1,255,128,190,233,235, 15,133,244,247,72,139,54,72,129,198,239,248,1,255,128,190,233,235,255,128, 191,233,235,255,132,192,255,15,182,192,255,252,247,216,141,128,233,255,64, 128,184,253,240,11,233,235,255,15,140,244,255,255,15,148,208,15,182,192,255, 252,247,216,131,192,3,255,64,137,128,253,240,11,233,15,132,244,247,255,64, 128,184,253,240,11,233,235,15,132,244,247,255,15,149,208,15,182,192,255,197, 252,248,87,192,255,15,87,192,255,64,199,128,253,240,11,233,237,15,138,243, 15,133,243,255,64,199,128,253,240,11,233,237,15,132,243,248,1,255,64,199, 128,253,240,11,233,237,15,138,245,15,133,245,255,184,237,15,138,244,247,15, 133,244,247,184,237,248,1,255,15,138,243,15,133,243,248,1,255,64,252,246, 128,253,240,11,233,235,15,132,244,249,255,72,139,184,253,240,3,233,131,47, 1,15,133,244,249,72,137,4,36,255,72,139,4,36,248,3,255,72,139,12,37,237,255, 72,184,237,237,72,139,8,255,72,43,12,37,237,255,72,184,237,237,72,43,8,255, 72,129,252,249,239,15,130,243,255,252,246,128,233,1,72,199,199,237,15,133, 244,247,255,186,237,255,59,144,233,15,71,144,233,43,144,233,43,144,233,255, 193,226,4,72,99,210,72,41,215,248,1,255,73,191,237,237,77,139,63,255,72,139, 20,37,237,255,72,186,237,237,72,139,18,255,76,41,252,250,255,72,129,252,250, 239,255,72,57,252,250,255,15,130,244,247,254,1,72,141,176,233,255,73,137, 199,252,233,244,247,254,0,72,129,4,253,37,237,239,255,72,186,237,237,72,129, 2,239,255,72,1,60,37,237,255,72,186,237,237,72,1,58,255,65,199,135,233,237, 255,73,199,135,233,237,255,72,185,237,237,73,137,143,233,255,72,141,136,233, 73,137,143,233,255,72,139,12,36,73,137,143,233,255,65,129,143,233,239,255, 131,1,1,255,131,0,1,255,72,139,136,233,73,137,143,233,139,144,233,129,226, 239,129,202,239,128,184,233,235,15,132,244,247,129,202,239,72,139,136,233, 248,1,65,9,151,233,73,137,143,233,72,131,184,233,0,15,133,244,247,72,141, 184,233,255,73,139,142,233,255,72,139,137,233,255,72,186,237,237,72,57,145, 233,255,72,129,185,233,239,255,73,139,134,233,255,73,139,150,233,72,139,130, 233,255,72,185,237,237,72,57,200,255,72,133,192,15,132,244,247,255,72,137, 186,233,255,72,141,178,233,255,72,133,192,15,133,244,249,255,72,185,237,237, 72,57,136,233,255,72,129,184,233,239,255,252,233,244,25,255,64,128,184,253, 240,11,233,235,15,133,243,255,252,233,244,11,254,0,73,139,134,233,72,139, 128,233,72,133,192,15,132,244,247,255,73,139,134,233,72,139,144,233,72,59, 151,233,15,133,244,247,72,139,128,233,255,72,141,20,36,255,72,133,192,15, 133,244,248,252,233,244,11,254,0,252,247,128,233,237,15,133,244,247,254,1, 72,139,60,36,72,137,198,186,237,255,72,133,192,15,132,244,11,255,73,137,199, 255,72,139,128,253,240,3,233,255,72,191,237,237,72,57,184,233,255,73,139, 135,233,252,247,128,233,237,15,133,243,255,73,199,134,233,0,0,0,0,255,73, 139,135,233,73,137,134,233,255,77,137,183,233,255,73,139,135,233,255,132, 192,73,139,135,233,15,133,244,247,252,233,244,11,254,0,132,192,15,132,244, 11,255,73,137,151,233,255,73,139,150,233,73,137,151,233,255,72,185,237,237, 72,139,17,255,72,139,146,233,255,73,139,135,233,72,139,144,233,255,72,139, 144,233,72,252,247,194,1,0,0,0,15,132,244,247,255,72,3,20,37,237,255,72,185, 237,237,72,3,17,255,72,139,18,248,1,255,72,185,237,237,76,137,57,255,77,137, 252,254,255,76,139,184,233,255,72,139,184,233,255,72,129,199,239,255,73,137, 190,233,255,232,244,247,254,1,248,1,88,252,233,245,254,0,72,139,184,233,73, 137,190,233,255,65,139,142,233,129,252,249,239,255,139,144,233,65,139,142, 233,57,209,255,15,143,244,247,254,1,65,139,142,233,252,233,244,247,254,0, 252,247,128,233,237,15,133,244,247,255,137,202,72,193,226,5,255,73,1,215, 255,73,1,150,233,255,41,202,15,142,244,249,255,72,193,225,4,73,141,140,253, 14,233,248,2,199,129,233,237,131,252,234,1,72,141,137,233,15,133,244,2,248, 3,255,132,192,15,132,244,11,73,139,135,233,255,252,255,144,233,255,76,137, 52,37,237,255,72,184,237,237,76,137,48,255,65,252,246,135,233,235,15,133, 244,247,254,1,248,1,73,139,191,233,255,248,1,73,139,191,233,64,131,168,253, 240,11,233,1,15,133,244,247,255,252,233,244,248,248,1,64,252,247,64,240,11, 4,237,15,133,244,247,255,248,1,252,233,244,248,254,0,248,1,76,137,252,255, 255,15,133,244,17,255,73,139,135,233,252,247,128,233,237,15,133,244,247,254, 1,252,233,244,18,254,0,72,184,237,237,131,0,1,255,73,139,190,233,252,246, 135,233,235,15,133,244,247,254,1,72,133,192,15,133,244,11,252,233,244,248, 254,0,72,141,128,253,240,3,233,255,72,137,192,240,131,255,128,184,233,235, 15,133,244,247,72,139,0,248,1,255,64,199,128,253,240,11,233,237,252,233,244, 248,248,1,255,72,139,136,253,240,3,233,131,1,1,255,72,137,136,253,240,3,233, 255,64,199,128,253,240,11,233,237,252,233,244,252,255,186,237,72,49,201,77, 49,192,255,199,0,2,0,0,0,199,128,233,237,72,199,128,233,0,0,0,0,255,72,139, 12,36,255,252,233,244,253,254,0,128,252,249,235,15,133,243,255,128,252,249, 235,15,132,244,253,255,252,247,128,233,237,15,133,244,253,255,65,252,247, 135,233,237,15,133,244,247,254,1,64,199,128,253,240,11,233,237,72,133,192, 15,132,244,11,255,131,47,1,15,132,244,247,132,228,15,132,244,248,131,2,1, 252,233,244,248,248,1,255,73,139,134,233,129,136,233,239,255,65,129,167,233, 239,255,73,139,134,233,129,160,233,239,255,248,1,65,129,143,233,239,252,233, 244,247,254,0,65,129,167,233,239,248,1,255,73,139,134,233,72,139,128,233, 72,133,192,15,132,244,247,72,169,1,0,0,0,15,133,244,250,254,1,72,139,60,37, 237,255,72,191,237,237,72,139,63,255,72,209,232,57,135,233,255,15,133,244, 247,248,2,255,64,199,128,253,240,11,233,237,252,233,244,249,255,138,128,233, 255,65,138,134,233,255,136,4,36,255,138,12,36,252,233,244,248,255,138,136, 233,255,65,138,142,233,255,184,1,0,0,0,211,224,169,237,255,15,149,208,15, 182,192,131,192,2,255,248,2,128,252,249,235,255,65,128,190,233,235,255,72, 137,4,37,237,255,72,186,237,237,72,137,2,255,252,247,199,237,255,65,252,247, 134,233,237,255,252,233,244,254,254,0,15,133,244,15,255,73,139,190,233,72, 129,252,239,239,64,131,168,253,240,11,233,1,15,133,244,247,255,252,233,244, 250,248,1,64,252,247,64,240,11,4,237,15,133,244,247,255,248,1,248,4,255,252, 247,199,237,15,132,244,250,255,73,139,190,233,64,131,168,253,240,11,233,1, 15,133,244,247,255,77,139,182,233,255,15,133,244,16,255,15,133,244,41,255, 65,252,255,55,195,255,76,137,252,247,73,139,6,76,139,116,36,24,76,139,124, 36,32,72,131,196,40,252,255,48,195,255,72,133,210,255,72,133,201,255,64,252, 246,128,253,240,11,233,235,15,132,245,255,64,252,246,128,253,240,11,233,235, 15,132,244,255,255,131,40,1,15,132,244,248,255,132,252,246,15,132,245,255, 132,252,246,15,132,244,255,255,72,139,144,253,240,3,233,131,2,1,255,72,139, 136,253,240,3,233,132,252,246,15,132,244,248,128,252,250,235,15,133,244,247, 139,145,233,72,139,137,233,132,252,246,15,132,244,248,248,1,131,1,1,248,2, 255,64,137,144,253,240,11,233,255,64,128,184,253,240,11,233,235,15,133,244, 247,191,237,255,64,128,184,253,240,11,233,235,15,133,243,72,139,0,72,129, 192,239,255,64,128,184,253,240,11,233,235,15,132,244,247,252,233,243,254, 0,64,139,144,253,240,11,233,128,252,250,235,15,133,244,247,254,1,248,1,128, 252,250,235,15,133,243,72,139,0,72,129,192,239,255,64,139,144,253,240,11, 233,128,252,250,235,15,132,244,247,252,233,243,254,0,64,139,144,253,240,11, 233,128,252,250,235,15,133,243,255,64,199,128,253,240,11,233,237,252,233, 244,254,254,0,72,133,192,15,132,244,255,255,64,199,128,253,240,11,233,237, 252,233,244,254,255,73,139,182,233,72,139,134,233,72,131,232,1,255,72,185, 237,237,139,9,255,72,193,225,5,72,57,200,15,131,244,255,255,72,3,4,37,237, 255,72,185,237,237,72,3,1,255,128,184,233,235,15,133,244,255,255,15,133,244, 255,72,139,0,131,0,1,248,1,255,64,252,246,128,253,240,11,233,235,15,133,244, 248,254,1,64,199,128,253,240,11,233,237,131,47,1,255,248,3,252,247,71,4,237, 15,133,244,251,255,252,255,209,255,72,129,198,239,255,252,233,244,1,254,0, 64,128,184,253,240,11,233,235,15,133,244,247,72,139,128,253,240,131,240,3, 233,72,129,192,240,35,239,248,1,255,186,1,0,0,0,64,138,136,253,240,11,233, 211,226,252,247,194,237,15,132,244,247,255,65,129,190,233,239,15,130,243, 255,65,129,190,233,239,15,130,244,247,254,1,65,129,190,233,239,15,131,244, 251,255,73,139,134,233,72,139,176,233,255,132,192,15,133,244,247,254,1,64, 199,128,253,240,11,233,237,252,233,244,11,254,0,72,184,237,237,72,57,135, 233,255,72,129,191,233,239,255,128,191,233,235,15,133,244,247,72,139,63,248, 1,255,73,139,134,233,72,139,144,233,72,59,151,233,15,133,244,251,72,139,128, 233,255,15,140,244,251,255,15,140,244,254,255,139,148,253,7,233,132,210,15, 132,244,251,72,1,199,255,73,139,134,233,72,139,176,233,72,133,252,246,15, 133,244,247,254,1,248,1,252,247,134,233,237,255,128,191,233,235,15,133,244, 248,72,139,7,131,0,1,255,64,199,128,253,240,11,233,237,252,233,244,255,248, 2,72,137,252,247,255,64,199,128,253,240,11,233,237,252,233,244,255,248,3, 255,139,151,233,132,210,15,132,243,255,139,151,233,132,210,15,132,244,251, 255,139,151,233,255,128,252,250,235,15,133,244,250,255,72,139,128,253,240, 3,233,131,0,1,255,64,199,128,253,240,11,233,237,252,233,244,255,254,1,64, 199,128,253,240,11,233,237,252,233,244,255,254,0,128,252,250,235,15,142,244, 247,254,1,128,252,250,235,15,132,244,247,255,72,139,135,233,72,139,128,233, 72,139,176,233,255,252,233,244,255,248,1,255,72,137,184,253,240,3,233,255, 128,252,250,235,15,133,244,247,72,139,0,72,129,192,239,255,64,139,144,253, 240,11,233,255,248,1,128,252,250,235,15,133,243,255,248,8,72,137,198,255, 72,139,184,253,240,3,233,131,47,1,15,133,244,247,255,73,139,134,233,72,139, 144,233,72,59,151,233,15,133,244,253,255,72,131,184,233,0,15,133,244,253, 255,72,139,128,233,72,133,192,15,140,244,253,255,128,188,253,7,233,235,15, 132,244,253,255,128,191,233,235,15,132,243,255,128,191,233,235,15,132,244, 253,255,72,139,184,253,240,3,233,72,131,191,233,0,15,133,244,247,72,141,191, 233,254,1,15,128,244,249,255,73,139,150,233,72,129,194,239,255,72,139,184, 253,240,3,233,72,131,191,233,0,15,133,244,247,72,141,135,233,254,1,73,139, 142,233,72,129,193,239,255,73,199,192,237,255,73,184,237,237,255,73,139,134, 233,72,139,144,233,72,59,151,233,15,133,244,251,255,72,139,128,233,72,133, 192,15,140,244,251,128,188,253,7,233,235,15,132,244,251,72,1,199,255,76,141, 128,253,240,3,233,255,73,137,192,240,131,255,64,128,184,253,240,11,233,235, 15,132,244,253,255,65,139,190,233,131,252,255,252,255,15,132,244,253,255, 72,139,128,253,240,3,233,72,141,184,233,72,139,176,233,255,72,139,128,253, 240,131,240,3,233,72,139,128,253,240,131,240,3,233,255,72,139,128,253,240, 3,233,72,139,128,233,255,64,199,128,253,240,11,233,237,131,7,1,255,65,128, 190,233,235,15,133,244,247,254,1,252,233,244,28,254,0,72,43,135,233,255,72, 153,72,252,247,252,255,255,72,141,61,244,250,252,255,36,7,255,252,255,160, 246,250,255,254,2,250,7,248,4,255,246,249,255,72,139,176,253,240,3,233,255, 128,190,233,235,15,133,244,249,255,72,139,182,233,252,233,244,248,254,0,72, 129,252,254,239,255,15,131,244,249,255,72,141,5,244,250,252,255,36,252,240, 255,252,255,36,252,245,246,250,255,72,139,176,253,240,3,233,254,1,64,128, 184,253,240,11,233,235,15,133,245,255,186,1,0,0,0,255,64,138,136,253,240, 11,233,211,226,252,247,194,237,15,132,244,252,255,72,185,237,237,73,137,142, 233,255,64,128,184,253,240,11,233,235,15,133,244,253,72,199,199,237,255,252, 255,214,255,248,8,73,139,182,233,255,73,139,134,233,72,141,136,233,255,15, 159,208,15,182,192,141,128,233,255,131,7,1,248,1,255,65,199,134,233,0,0,0, 0,255,65,139,134,233,255,252,247,135,233,237,15,133,244,248,255,137,198,72, 193,230,5,72,3,183,233,248,1,57,135,233,255,15,134,244,249,255,131,192,1, 255,72,129,198,239,252,233,244,1,255,137,198,72,193,230,4,72,3,183,233,248, 1,57,135,233,255,15,134,244,250,255,128,190,233,235,15,133,244,250,255,248, 3,65,137,134,233,255,72,131,190,233,0,15,132,244,248,255,72,139,134,233,255, 72,137,128,253,240,3,233,252,247,128,233,237,15,132,244,247,255,64,199,128, 253,240,11,233,237,252,233,244,249,248,1,131,0,1,255,248,4,65,137,134,233, 72,131,232,1,255,248,3,248,4,65,137,134,233,255,248,3,248,4,255,73,139,190, 233,72,139,135,233,72,133,192,15,132,244,255,255,72,169,237,15,133,244,255, 255,72,133,192,15,133,244,8,252,233,244,11,254,0,15,149,208,15,182,192,141, 128,233,255,72,139,136,253,240,3,233,73,137,142,233,255,64,139,128,253,240, 11,233,255,73,141,190,233,190,237,255,128,191,233,235,15,133,243,255 }; #line 140 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.globals zend_lb enum { zend_lbinterrupt_handler, zend_lbexception_handler, zend_lbexception_handler_undef, zend_lbexception_handler_free_op1_op2, zend_lbexception_handler_free_op2, zend_lbleave_function_handler, zend_lbleave_throw_handler, zend_lbicall_throw_handler, zend_lbthrow_cannot_pass_by_ref, zend_lbundefined_offset_ex, zend_lbundefined_offset, zend_lbundefined_index_ex, zend_lbundefined_index, zend_lbcannot_add_element_ex, zend_lbcannot_add_element, zend_lbundefined_function, zend_lbnegative_shift, zend_lbmod_by_zero, zend_lbinvalid_this, zend_lbone, zend_lbhybrid_runtime_jit, zend_lbhybrid_profile_jit, zend_lbhybrid_hot_code, zend_lbhybrid_func_hot_counter, zend_lbhybrid_loop_hot_counter, zend_lbhybrid_hot_trace, zend_lbhybrid_func_trace_counter, zend_lbhybrid_ret_trace_counter, zend_lbhybrid_loop_trace_counter, zend_lbtrace_halt, zend_lbtrace_exit, zend_lbtrace_escape, zend_lbcontext_threaded_call, zend_lbassign_const, zend_lbassign_tmp, zend_lbassign_var, zend_lbassign_cv_noref, zend_lbassign_cv, zend_lb_MAX }; #line 141 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.section code, cold_code, jmp_table #define DASM_SECTION_CODE 0 #define DASM_SECTION_COLD_CODE 1 #define DASM_SECTION_JMP_TABLE 2 #define DASM_MAXSECTION 3 #line 142 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" static void* dasm_labels[zend_lb_MAX]; #if ZTS static size_t tsrm_ls_cache_tcb_offset = 0; static size_t tsrm_tls_index; static size_t tsrm_tls_offset; #endif #define IS_32BIT(addr) (((uintptr_t)(addr)) <= 0x7fffffff) #define IS_SIGNED_32BIT(val) ((((intptr_t)(val)) <= 0x7fffffff) && (((intptr_t)(val)) >= (-2147483647 - 1))) /* Call range is before or after 2GB */ #define MAY_USE_32BIT_ADDR(addr) \ (IS_SIGNED_32BIT((char*)(addr) - (char*)dasm_buf) && \ IS_SIGNED_32BIT((char*)(addr) - (char*)dasm_end)) #define CAN_USE_AVX() (JIT_G(opt_flags) & allowed_opt_flags & ZEND_JIT_CPU_AVX) /* Not Implemented Yet */ //|.macro NIY //|| //ZEND_ASSERT(0); //| int3 //|.endmacro //|.macro NIY_STUB //|| //ZEND_ASSERT(0); //| int3 //|.endmacro //|.macro ADD_HYBRID_SPAD //||#ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE //| add r4, HYBRID_SPAD //||#endif //|.endmacro //|.macro SUB_HYBRID_SPAD //||#ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE //| sub r4, HYBRID_SPAD //||#endif //|.endmacro //|.macro LOAD_ADDR, reg, addr //| .if X64 //|| if (IS_SIGNED_32BIT(addr)) { //| mov reg, ((ptrdiff_t)addr) // 0x48 0xc7 0xc0 <imm-32-bit> //|| } else { //| mov64 reg, ((ptrdiff_t)addr) // 0x48 0xb8 <imm-64-bit> //|| } //| .else //| mov reg, ((ptrdiff_t)addr) //| .endif //|.endmacro //|.macro LOAD_TSRM_CACHE, reg //| .if X64WIN //| gs //| mov reg, aword [0x58] //| mov reg, aword [reg+tsrm_tls_index] //| mov reg, aword [reg+tsrm_tls_offset] //| .elif WIN //| fs //| mov reg, aword [0x2c] //| mov reg, aword [reg+tsrm_tls_index] //| mov reg, aword [reg+tsrm_tls_offset] //| .elif X64APPLE //| gs //|| if (tsrm_ls_cache_tcb_offset) { //| mov reg, aword [tsrm_ls_cache_tcb_offset] //|| } else { //| mov reg, aword [tsrm_tls_index] //| mov reg, aword [reg+tsrm_tls_offset] //|| } //| .elif X64 //| fs //|| if (tsrm_ls_cache_tcb_offset) { //| mov reg, aword [tsrm_ls_cache_tcb_offset] //|| } else { //| mov reg, [0x8] //| mov reg, aword [reg+tsrm_tls_index] //| mov reg, aword [reg+tsrm_tls_offset] //|| } //| .else //| gs //|| if (tsrm_ls_cache_tcb_offset) { //| mov reg, aword [tsrm_ls_cache_tcb_offset] //|| } else { //| mov reg, [0x4] //| mov reg, aword [reg+tsrm_tls_index] //| mov reg, aword [reg+tsrm_tls_offset] //|| } //| .endif //|.endmacro //|.macro LOAD_ADDR_ZTS, reg, struct, field //| .if ZTS //| LOAD_TSRM_CACHE reg //| lea reg, aword [reg + (struct.._offset + offsetof(zend_..struct, field))] //| .else //| LOAD_ADDR reg, &struct.field //| .endif //|.endmacro //|.macro PUSH_ADDR, addr, tmp_reg //| .if X64 //|| if (IS_SIGNED_32BIT(addr)) { //| push ((ptrdiff_t)addr) //|| } else { //| mov64 tmp_reg, ((ptrdiff_t)addr) //| push tmp_reg //|| } //| .else //| push ((ptrdiff_t)addr) //| .endif //|.endmacro //|.macro ADDR_STORE, mem, addr, tmp_reg //| .if X64 //|| if (IS_SIGNED_32BIT(addr)) { //| mov mem, ((ptrdiff_t)addr) //|| } else { //| mov64 tmp_reg, ((ptrdiff_t)addr) //| mov mem, tmp_reg //|| } //| .else //| mov mem, ((ptrdiff_t)addr) //| .endif //|.endmacro //|.macro ADDR_CMP, mem, addr, tmp_reg //| .if X64 //|| if (IS_SIGNED_32BIT(addr)) { //| cmp mem, ((ptrdiff_t)addr) //|| } else { //| mov64 tmp_reg, ((ptrdiff_t)addr) //| cmp mem, tmp_reg //|| } //| .else //| cmp mem, ((ptrdiff_t)addr) //| .endif //|.endmacro //|.macro PUSH_ADDR_ZTS, struct, field, tmp_reg //| .if ZTS //| LOAD_TSRM_CACHE tmp_reg //| lea tmp_reg, aword [tmp_reg + (struct.._offset + offsetof(zend_..struct, field))] //| push tmp_reg //| .else //| PUSH_ADDR &struct.field, tmp_reg //| .endif //|.endmacro //|.macro _MEM_OP, mem_ins, prefix, addr, op2, tmp_reg //| .if X64 //|| if (IS_SIGNED_32BIT(addr)) { //| mem_ins prefix [addr], op2 //|| } else { //| mov64 tmp_reg, ((ptrdiff_t)addr) //| mem_ins prefix [tmp_reg], op2 //|| } //| .else //| mem_ins prefix [addr], op2 //| .endif //|.endmacro //|.macro MEM_LOAD_OP, mem_ins, reg, prefix, addr, tmp_reg //| .if X64 //|| if (IS_SIGNED_32BIT(addr)) { //| mem_ins reg, prefix [addr] //|| } else { //| mov64 tmp_reg, ((ptrdiff_t)addr) //| mem_ins reg, prefix [tmp_reg] //|| } //| .else //| mem_ins reg, prefix [addr] //| .endif //|.endmacro //|.macro MEM_LOAD, op1, prefix, addr, tmp_reg //| MEM_LOAD_OP mov, op1, prefix, addr, tmp_reg //|.endmacro //|.macro _MEM_OP_ZTS, mem_ins, prefix, struct, field, op2, tmp_reg //| .if ZTS //| LOAD_TSRM_CACHE tmp_reg //| mem_ins prefix [tmp_reg+(struct.._offset+offsetof(zend_..struct, field))], op2 //| .else //| _MEM_OP mem_ins, prefix, &struct.field, op2, tmp_reg //| .endif //|.endmacro //|.macro MEM_STORE_ZTS, prefix, struct, field, op2, tmp_reg //| _MEM_OP_ZTS mov, prefix, struct, field, op2, tmp_reg //|.endmacro //|.macro MEM_CMP_ZTS, prefix, struct, field, op2, tmp_reg //| _MEM_OP_ZTS cmp, prefix, struct, field, op2, tmp_reg //|.endmacro //|.macro MEM_UPDATE_ZTS, mem_ins, prefix, struct, field, op2, tmp_reg //| _MEM_OP_ZTS mem_ins, prefix, struct, field, op2, tmp_reg //|.endmacro //|.macro MEM_LOAD_OP_ZTS, mem_ins, reg, prefix, struct, field, tmp_reg //| .if ZTS //| LOAD_TSRM_CACHE tmp_reg //| mem_ins reg, prefix [tmp_reg+(struct.._offset+offsetof(zend_..struct, field))] //| .else //| MEM_LOAD_OP mem_ins, reg, prefix, &struct.field, tmp_reg //| .endif //|.endmacro //|.macro MEM_LOAD_ZTS, reg, prefix, struct, field, tmp_reg //| MEM_LOAD_OP_ZTS mov, reg, prefix, struct, field, tmp_reg //|.endmacro //|.macro EXT_CALL, func, tmp_reg //| .if X64 //|| if (MAY_USE_32BIT_ADDR(func)) { //| call qword &func //|| } else { //| LOAD_ADDR tmp_reg, func //| call tmp_reg //|| } //| .else //| call dword &func //| .endif //|.endmacro //|.macro EXT_JMP, func, tmp_reg //| .if X64 //|| if (MAY_USE_32BIT_ADDR(func)) { //| jmp qword &func //|| } else { //| LOAD_ADDR tmp_reg, func //| jmp tmp_reg //|| } //| .else //| jmp dword &func //| .endif //|.endmacro //|.macro SAVE_IP //|| if (GCC_GLOBAL_REGS) { //| mov aword EX->opline, IP //|| } //|.endmacro //|.macro LOAD_IP //|| if (GCC_GLOBAL_REGS) { //| mov IP, aword EX->opline //|| } //|.endmacro //|.macro LOAD_IP_ADDR, addr //|| if (GCC_GLOBAL_REGS) { //| LOAD_ADDR IP, addr //|| } else { //| ADDR_STORE aword EX->opline, addr, RX //|| } //|.endmacro //|.macro LOAD_IP_ADDR_ZTS, struct, field //| .if ZTS //|| if (GCC_GLOBAL_REGS) { //| LOAD_TSRM_CACHE IP //| mov IP, aword [IP + (struct.._offset + offsetof(zend_..struct, field))] //|| } else { //| LOAD_TSRM_CACHE RX //| lea RX, aword [RX + (struct.._offset + offsetof(zend_..struct, field))] //| mov aword EX->opline, RX //|| } //| .else //| LOAD_IP_ADDR &struct.field //| .endif //|.endmacro //|.macro GET_IP, reg //|| if (GCC_GLOBAL_REGS) { //| mov reg, IP //|| } else { //| mov reg, aword EX->opline //|| } //|.endmacro //|.macro ADD_IP, val //|| if (GCC_GLOBAL_REGS) { //| add IP, val //|| } else { //| add aword EX->opline, val //|| } //|.endmacro //|.macro JMP_IP //|| if (GCC_GLOBAL_REGS) { //| jmp aword [IP] //|| } else { //| mov r0, aword EX:FCARG1a->opline //| jmp aword [r0] //|| } //|.endmacro /* In 64-bit build we compare only low 32-bits. * x86_64 cmp instruction doesn't support immediate 64-bit operand, and full * comparison would require an additional load of 64-bit address into register. * This is not a problem at all, while JIT buffer size is less than 4GB. */ //|.macro CMP_IP, addr //|| if (GCC_GLOBAL_REGS) { //| cmp IPl, addr //|| } else { //| cmp dword EX->opline, addr //|| } //|.endmacro //|.macro LOAD_ZVAL_ADDR, reg, addr //|| if (Z_MODE(addr) == IS_CONST_ZVAL) { //| LOAD_ADDR reg, Z_ZV(addr) //|| } else if (Z_MODE(addr) == IS_MEM_ZVAL) { //|| if (Z_OFFSET(addr)) { //| lea reg, qword [Ra(Z_REG(addr))+Z_OFFSET(addr)] //|| } else { //| mov reg, Ra(Z_REG(addr)) //|| } //|| } else { //|| ZEND_UNREACHABLE(); //|| } //|.endmacro //|.macro PUSH_ZVAL_ADDR, addr, tmp_reg //|| if (Z_MODE(addr) == IS_CONST_ZVAL) { //| PUSH_ADDR Z_ZV(addr), tmp_reg //|| } else if (Z_MODE(addr) == IS_MEM_ZVAL) { //|| if (Z_OFFSET(addr)) { //| lea tmp_reg, qword [Ra(Z_REG(addr))+Z_OFFSET(addr)] //| push tmp_reg //|| } else { //| push Ra(Z_REG(addr)) //|| } //|| } else { //|| ZEND_UNREACHABLE(); //|| } //|.endmacro //|.macro GET_Z_TYPE_INFO, reg, zv //| mov reg, dword [zv+offsetof(zval,u1.type_info)] //|.endmacro //|.macro SET_Z_TYPE_INFO, zv, type //| mov dword [zv+offsetof(zval,u1.type_info)], type //|.endmacro //|.macro GET_ZVAL_TYPE, reg, addr //|| ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); //| mov reg, byte [Ra(Z_REG(addr))+Z_OFFSET(addr)+offsetof(zval,u1.v.type)] //|.endmacro //|.macro GET_ZVAL_TYPE_INFO, reg, addr //|| ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); //| mov reg, dword [Ra(Z_REG(addr))+Z_OFFSET(addr)+offsetof(zval,u1.type_info)] //|.endmacro //|.macro SET_ZVAL_TYPE_INFO, addr, type //|| ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); //| mov dword [Ra(Z_REG(addr))+Z_OFFSET(addr)+offsetof(zval,u1.type_info)], type //|.endmacro //|.macro GET_Z_PTR, reg, zv //| mov reg, aword [zv] //|.endmacro //|.macro GET_Z_W2, reg, zv //| mov reg, dword [zv+4] //|.endmacro //|.macro SET_Z_W2, zv, reg //| mov dword [zv+4], reg //|.endmacro //|.macro GET_ZVAL_PTR, reg, addr //|| ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); //| mov reg, aword [Ra(Z_REG(addr))+Z_OFFSET(addr)] //|.endmacro //|.macro SET_ZVAL_PTR, addr, val //|| ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); //| mov aword [Ra(Z_REG(addr))+Z_OFFSET(addr)], val //|.endmacro //|.macro GET_ZVAL_W2, reg, addr //|| ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); //| mov reg, dword [Ra(Z_REG(addr))+Z_OFFSET(addr)+4] //|.endmacro //|.macro SET_ZVAL_W2, addr, val //|| ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); //| mov dword [Ra(Z_REG(addr))+Z_OFFSET(addr)+4], val //|.endmacro //|.macro UNDEF_OPLINE_RESULT //| mov r0, EX->opline //| mov eax, dword OP:r0->result.var //| SET_Z_TYPE_INFO FP + r0, IS_UNDEF //|.endmacro //|.macro UNDEF_OPLINE_RESULT_IF_USED //| test byte OP:RX->result_type, (IS_TMP_VAR|IS_VAR) //| jz >1 //| mov eax, dword OP:RX->result.var //| SET_Z_TYPE_INFO FP + r0, IS_UNDEF //|1: //|.endmacro //|.macro SSE_AVX_INS, sse_ins, avx_ins, op1, op2 //|| if (CAN_USE_AVX()) { //| avx_ins op1, op2 //|| } else { //| sse_ins op1, op2 //|| } //|.endmacro //|.macro SSE_OP, sse_ins, reg, addr, tmp_reg //|| if (Z_MODE(addr) == IS_CONST_ZVAL) { //| MEM_LOAD_OP sse_ins, xmm(reg-ZREG_XMM0), qword, Z_ZV(addr), tmp_reg //|| } else if (Z_MODE(addr) == IS_MEM_ZVAL) { //| sse_ins xmm(reg-ZREG_XMM0), qword [Ra(Z_REG(addr))+Z_OFFSET(addr)] //|| } else if (Z_MODE(addr) == IS_REG) { //| sse_ins xmm(reg-ZREG_XMM0), xmm(Z_REG(addr)-ZREG_XMM0) //|| } else { //|| ZEND_UNREACHABLE(); //|| } //|.endmacro //|.macro DOUBLE_CMP, reg, addr //|| if (Z_MODE(addr) == IS_CONST_ZVAL) { //| .if X64 //|| if (IS_SIGNED_32BIT(Z_ZV(addr))) { //| SSE_AVX_INS ucomisd, vucomisd, xmm(reg-ZREG_XMM0), qword [Z_ZV(addr)] //|| } else { //| LOAD_ADDR r0, Z_ZV(addr) //| SSE_AVX_INS ucomisd, vucomisd, xmm(reg-ZREG_XMM0), qword [r0] //|| } //| .else //| SSE_AVX_INS ucomisd, vucomisd, xmm(reg-ZREG_XMM0), qword [Z_ZV(addr)] //| .endif //|| } else if (Z_MODE(addr) == IS_MEM_ZVAL) { //| SSE_AVX_INS ucomisd, vucomisd, xmm(reg-ZREG_XMM0), qword [Ra(Z_REG(addr))+Z_OFFSET(addr)] //|| } else if (Z_MODE(addr) == IS_REG) { //| SSE_AVX_INS ucomisd, vucomisd, xmm(reg-ZREG_XMM0), xmm(Z_REG(addr)-ZREG_XMM0) //|| } else { //|| ZEND_UNREACHABLE(); //|| } //|.endmacro //|.macro DOUBLE_GET_LONG, reg, lval, tmp_reg //|| if (lval == 0) { //|| if (CAN_USE_AVX()) { //| vxorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0) //|| } else { //| xorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0) //|| } //|| } else { //|.if X64 //|| if (!IS_SIGNED_32BIT(lval)) { //| mov64 Ra(tmp_reg), lval //|| } else { //| mov Ra(tmp_reg), lval //|| } //|.else //| mov Ra(tmp_reg), lval //|.endif //|| if (CAN_USE_AVX()) { //| vxorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0) //| vcvtsi2sd, xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), Ra(tmp_reg) //|| } else { //| xorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0) //| cvtsi2sd, xmm(reg-ZREG_XMM0), Ra(tmp_reg) //|| } //|| } //|.endmacro //|.macro DOUBLE_GET_ZVAL_LVAL, reg, addr, tmp_reg //|| if (Z_MODE(addr) == IS_CONST_ZVAL) { //| DOUBLE_GET_LONG reg, Z_LVAL_P(Z_ZV(addr)), tmp_reg //|| } else if (Z_MODE(addr) == IS_MEM_ZVAL) { //|| if (CAN_USE_AVX()) { //| vxorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0) //| vcvtsi2sd xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), aword [Ra(Z_REG(addr))+Z_OFFSET(addr)] //|| } else { //| xorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0) //| cvtsi2sd xmm(reg-ZREG_XMM0), aword [Ra(Z_REG(addr))+Z_OFFSET(addr)] //|| } //|| } else if (Z_MODE(addr) == IS_REG) { //|| if (CAN_USE_AVX()) { //| vxorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0) //| vcvtsi2sd xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), Ra(Z_REG(addr)) //|| } else { //| xorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0) //| cvtsi2sd xmm(reg-ZREG_XMM0), Ra(Z_REG(addr)) //|| } //|| } else { //|| ZEND_UNREACHABLE(); //|| } //|.endmacro //|.macro DOUBLE_GET_ZVAL_DVAL, reg, addr //|| if (Z_MODE(addr) != IS_REG || reg != Z_REG(addr)) { //|| if (Z_MODE(addr) == IS_CONST_ZVAL) { //| .if X64 //|| if (IS_SIGNED_32BIT(Z_ZV(addr))) { //| SSE_AVX_INS movsd, vmovsd, xmm(reg-ZREG_XMM0), qword [Z_ZV(addr)] //|| } else { //| LOAD_ADDR r0, Z_ZV(addr) //| SSE_AVX_INS movsd, vmovsd, xmm(reg-ZREG_XMM0), qword [r0] //|| } //| .else //| SSE_AVX_INS movsd, vmovsd, xmm(reg-ZREG_XMM0), qword [Z_ZV(addr)] //| .endif //|| } else if (Z_MODE(addr) == IS_MEM_ZVAL) { //| SSE_AVX_INS movsd, vmovsd, xmm(reg-ZREG_XMM0), qword [Ra(Z_REG(addr))+Z_OFFSET(addr)] //|| } else if (Z_MODE(addr) == IS_REG) { //| SSE_AVX_INS movaps, vmovaps, xmm(reg-ZREG_XMM0), xmm(Z_REG(addr)-ZREG_XMM0) //|| } else { //|| ZEND_UNREACHABLE(); //|| } //|| } //|.endmacro //|.macro SSE_MATH, opcode, reg, addr, tmp_reg //|| switch (opcode) { //|| case ZEND_ADD: //| SSE_OP addsd, reg, addr, tmp_reg //|| break; //|| case ZEND_SUB: //| SSE_OP subsd, reg, addr, tmp_reg //|| break; //|| case ZEND_MUL: //| SSE_OP mulsd, reg, addr, tmp_reg //|| break; //|| case ZEND_DIV: //| SSE_OP divsd, reg, addr, tmp_reg //|| break; //|| } //|.endmacro //|.macro SSE_MATH_REG, opcode, dst_reg, src_reg //|| switch (opcode) { //|| case ZEND_ADD: //| addsd xmm(dst_reg-ZREG_XMM0), xmm(src_reg-ZREG_XMM0) //|| break; //|| case ZEND_SUB: //| subsd xmm(dst_reg-ZREG_XMM0), xmm(src_reg-ZREG_XMM0) //|| break; //|| case ZEND_MUL: //| mulsd xmm(dst_reg-ZREG_XMM0), xmm(src_reg-ZREG_XMM0) //|| break; //|| case ZEND_DIV: //| divsd xmm(dst_reg-ZREG_XMM0), xmm(src_reg-ZREG_XMM0) //|| break; //|| } //|.endmacro //|.macro DOUBLE_SET_ZVAL_DVAL, addr, reg //|| if (Z_MODE(addr) == IS_REG) { //|| if (reg != Z_REG(addr)) { //| SSE_AVX_INS movaps, vmovaps, xmm(Z_REG(addr)-ZREG_XMM0), xmm(reg-ZREG_XMM0) //|| } //|| } else { //|| ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); //| SSE_AVX_INS movsd, vmovsd, qword [Ra(Z_REG(addr))+Z_OFFSET(addr)], xmm(reg-ZREG_XMM0) //|| } //|.endmacro //|.macro AVX_OP, avx_ins, reg, op1_reg, addr, tmp_reg //|| if (Z_MODE(addr) == IS_CONST_ZVAL) { //| .if X64 //|| if (IS_SIGNED_32BIT(Z_ZV(addr))) { //| avx_ins xmm(reg-ZREG_XMM0), xmm(op1_reg-ZREG_XMM0), qword [Z_ZV(addr)] //|| } else { //| mov64 tmp_reg, ((ptrdiff_t)Z_ZV(addr)) //| avx_ins xmm(reg-ZREG_XMM0), xmm(op1_reg-ZREG_XMM0), qword [tmp_reg] //|| } //| .else //| avx_ins xmm(reg-ZREG_XMM0), xmm(op1_reg-ZREG_XMM0), qword [addr] //| .endif //|| } else if (Z_MODE(addr) == IS_MEM_ZVAL) { //| avx_ins xmm(reg-ZREG_XMM0), xmm(op1_reg-ZREG_XMM0), qword [Ra(Z_REG(addr))+Z_OFFSET(addr)] //|| } else if (Z_MODE(addr) == IS_REG) { //| avx_ins xmm(reg-ZREG_XMM0), xmm(op1_reg-ZREG_XMM0), xmm(Z_REG(addr)-ZREG_XMM0) //|| } else { //|| ZEND_UNREACHABLE(); //|| } //|.endmacro //|.macro AVX_MATH, opcode, reg, op1_reg, addr, tmp_reg //|| switch (opcode) { //|| case ZEND_ADD: //| AVX_OP vaddsd, reg, op1_reg, addr, tmp_reg //|| break; //|| case ZEND_SUB: //| AVX_OP vsubsd, reg, op1_reg, addr, tmp_reg //|| break; //|| case ZEND_MUL: //| AVX_OP vmulsd, reg, op1_reg, addr, tmp_reg //|| break; //|| case ZEND_DIV: //| AVX_OP vdivsd, reg, op1_reg, addr, tmp_reg //|| break; //|| } //|.endmacro //|.macro AVX_MATH_REG, opcode, dst_reg, op1_reg, src_reg //|| switch (opcode) { //|| case ZEND_ADD: //| vaddsd xmm(dst_reg-ZREG_XMM0), xmm(op1_reg-ZREG_XMM0), xmm(src_reg-ZREG_XMM0) //|| break; //|| case ZEND_SUB: //| vsubsd xmm(dst_reg-ZREG_XMM0), xmm(op1_reg-ZREG_XMM0), xmm(src_reg-ZREG_XMM0) //|| break; //|| case ZEND_MUL: //| vmulsd xmm(dst_reg-ZREG_XMM0), xmm(op1_reg-ZREG_XMM0), xmm(src_reg-ZREG_XMM0) //|| break; //|| case ZEND_DIV: //| vdivsd xmm(dst_reg-ZREG_XMM0), xmm(op1_reg-ZREG_XMM0), xmm(src_reg-ZREG_XMM0) //|| break; //|| } //|.endmacro //|.macro LONG_OP, long_ins, reg, addr, tmp_reg //|| if (Z_MODE(addr) == IS_CONST_ZVAL) { //| .if X64 //|| if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(addr)))) { //| mov64 tmp_reg, Z_LVAL_P(Z_ZV(addr)) //| long_ins Ra(reg), tmp_reg //|| } else { //| long_ins Ra(reg), Z_LVAL_P(Z_ZV(addr)) //|| } //| .else //| long_ins Ra(reg), Z_LVAL_P(Z_ZV(addr)) //| .endif //|| } else if (Z_MODE(addr) == IS_MEM_ZVAL) { //| long_ins Ra(reg), aword [Ra(Z_REG(addr))+Z_OFFSET(addr)] //|| } else if (Z_MODE(addr) == IS_REG) { //| long_ins Ra(reg), Ra(Z_REG(addr)) //|| } else { //|| ZEND_UNREACHABLE(); //|| } //|.endmacro //|.macro LONG_OP_WITH_32BIT_CONST, long_ins, op1_addr, lval //|| if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { //| long_ins aword [Ra(Z_REG(op1_addr))+Z_OFFSET(op1_addr)], lval //|| } else if (Z_MODE(op1_addr) == IS_REG) { //| long_ins Ra(Z_REG(op1_addr)), lval //|| } else { //|| ZEND_UNREACHABLE(); //|| } //|.endmacro //|.macro LONG_OP_WITH_CONST, long_ins, op1_addr, lval //|| if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { //| .if X64 //|| if (!IS_SIGNED_32BIT(lval)) { //| mov64 r0, lval //| long_ins aword [Ra(Z_REG(op1_addr))+Z_OFFSET(op1_addr)], r0 //|| } else { //| long_ins aword [Ra(Z_REG(op1_addr))+Z_OFFSET(op1_addr)], lval //|| } //| .else //| long_ins aword [Ra(Z_REG(op1_addr))+Z_OFFSET(op1_addr)], lval //| .endif //|| } else if (Z_MODE(op1_addr) == IS_REG) { //| .if X64 //|| if (!IS_SIGNED_32BIT(lval)) { //| mov64 r0, lval //| long_ins Ra(Z_REG(op1_addr)), r0 //|| } else { //| long_ins Ra(Z_REG(op1_addr)), lval //|| } //| .else //| long_ins Ra(Z_REG(op1_addr)), lval //| .endif //|| } else { //|| ZEND_UNREACHABLE(); //|| } //|.endmacro //|.macro GET_ZVAL_LVAL, reg, addr //|| if (Z_MODE(addr) == IS_CONST_ZVAL) { //|| if (Z_LVAL_P(Z_ZV(addr)) == 0) { //| xor Ra(reg), Ra(reg) //|| } else { //| .if X64 //|| if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(addr)))) { //| mov64 Ra(reg), Z_LVAL_P(Z_ZV(addr)) //|| } else { //| mov Ra(reg), Z_LVAL_P(Z_ZV(addr)) //|| } //| .else //| mov Ra(reg), Z_LVAL_P(Z_ZV(addr)) //| .endif //|| } //|| } else if (Z_MODE(addr) == IS_MEM_ZVAL) { //| mov Ra(reg), aword [Ra(Z_REG(addr))+Z_OFFSET(addr)] //|| } else if (Z_MODE(addr) == IS_REG) { //|| if (reg != Z_REG(addr)) { //| mov Ra(reg), Ra(Z_REG(addr)) //|| } //|| } else { //|| ZEND_UNREACHABLE(); //|| } //|.endmacro //|.macro LONG_MATH, opcode, reg, addr, tmp_reg //|| switch (opcode) { //|| case ZEND_ADD: //| LONG_OP add, reg, addr, Ra(tmp_reg) //|| break; //|| case ZEND_SUB: //| LONG_OP sub, reg, addr, Ra(tmp_reg) //|| break; //|| case ZEND_MUL: //| LONG_OP imul, reg, addr, Ra(tmp_reg) //|| break; //|| case ZEND_BW_OR: //| LONG_OP or, reg, addr, Ra(tmp_reg) //|| break; //|| case ZEND_BW_AND: //| LONG_OP and, reg, addr, Ra(tmp_reg) //|| break; //|| case ZEND_BW_XOR: //| LONG_OP xor, reg, addr, Ra(tmp_reg) //|| break; //|| default: //|| ZEND_UNREACHABLE(); //|| } //|.endmacro //|.macro LONG_MATH_REG, opcode, dst_reg, src_reg //|| switch (opcode) { //|| case ZEND_ADD: //| add dst_reg, src_reg //|| break; //|| case ZEND_SUB: //| sub dst_reg, src_reg //|| break; //|| case ZEND_MUL: //| imul dst_reg, src_reg //|| break; //|| case ZEND_BW_OR: //| or dst_reg, src_reg //|| break; //|| case ZEND_BW_AND: //| and dst_reg, src_reg //|| break; //|| case ZEND_BW_XOR: //| xor dst_reg, src_reg //|| break; //|| default: //|| ZEND_UNREACHABLE(); //|| } //|.endmacro //|.macro SET_ZVAL_LVAL, addr, lval //|| if (Z_MODE(addr) == IS_REG) { //| mov Ra(Z_REG(addr)), lval //|| } else { //|| ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); //| mov aword [Ra(Z_REG(addr))+Z_OFFSET(addr)], lval //|| } //|.endmacro //|.macro ZVAL_COPY_CONST, dst_addr, dst_info, dst_def_info, zv, tmp_reg //|| if (Z_TYPE_P(zv) > IS_TRUE) { //|| if (Z_TYPE_P(zv) == IS_DOUBLE) { //|| zend_reg dst_reg = (Z_MODE(dst_addr) == IS_REG) ? Z_REG(dst_addr) : ZREG_XMM0; //|| if (Z_DVAL_P(zv) == 0.0 && !is_signed(Z_DVAL_P(zv))) { //|| if (CAN_USE_AVX()) { //| vxorps xmm(dst_reg-ZREG_XMM0), xmm(dst_reg-ZREG_XMM0), xmm(dst_reg-ZREG_XMM0) //|| } else { //| xorps xmm(dst_reg-ZREG_XMM0), xmm(dst_reg-ZREG_XMM0) //|| } //| .if X64 //|| } else if (!IS_SIGNED_32BIT(zv)) { //| mov64 Ra(tmp_reg), ((uintptr_t)zv) //| SSE_AVX_INS movsd, vmovsd, xmm(dst_reg-ZREG_XMM0), qword [Ra(tmp_reg)] //| .endif //|| } else { //| SSE_AVX_INS movsd, vmovsd, xmm(dst_reg-ZREG_XMM0), qword [((uint32_t)(uintptr_t)zv)] //|| } //| DOUBLE_SET_ZVAL_DVAL dst_addr, dst_reg //|| } else if (Z_TYPE_P(zv) == IS_LONG && dst_def_info == MAY_BE_DOUBLE) { //|| zend_reg dst_reg = (Z_MODE(dst_addr) == IS_REG) ? Z_REG(dst_addr) : ZREG_XMM0; //| DOUBLE_GET_LONG dst_reg, Z_LVAL_P(zv), ZREG_R0 //| DOUBLE_SET_ZVAL_DVAL dst_addr, dst_reg //|| } else if (Z_LVAL_P(zv) == 0 && Z_MODE(dst_addr) == IS_REG) { //| xor Ra(Z_REG(dst_addr)), Ra(Z_REG(dst_addr)) //|| } else { //| .if X64 //|| if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { //|| if (Z_MODE(dst_addr) == IS_REG) { //| mov64 Ra(Z_REG(dst_addr)), ((uintptr_t)Z_LVAL_P(zv)) //|| } else { //| mov64 Ra(tmp_reg), ((uintptr_t)Z_LVAL_P(zv)) //| SET_ZVAL_LVAL dst_addr, Ra(tmp_reg) //|| } //|| } else { //| SET_ZVAL_LVAL dst_addr, Z_LVAL_P(zv) //|| } //| .else //| SET_ZVAL_LVAL dst_addr, Z_LVAL_P(zv) //| .endif //|| } //|| } //|| if (Z_MODE(dst_addr) == IS_MEM_ZVAL) { //|| if (dst_def_info == MAY_BE_DOUBLE) { //|| if ((dst_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != MAY_BE_DOUBLE) { //| SET_ZVAL_TYPE_INFO dst_addr, IS_DOUBLE //|| } //|| } else if (((dst_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (1<<Z_TYPE_P(zv))) || (dst_info & (MAY_BE_STRING|MAY_BE_ARRAY)) != 0) { //| SET_ZVAL_TYPE_INFO dst_addr, Z_TYPE_INFO_P(zv) //|| } //|| } //|.endmacro //|.macro ZVAL_COPY_CONST_2, dst_addr, res_addr, dst_info, dst_def_info, zv, tmp_reg //|| if (Z_TYPE_P(zv) > IS_TRUE) { //|| if (Z_TYPE_P(zv) == IS_DOUBLE) { //|| zend_reg dst_reg = (Z_MODE(dst_addr) == IS_REG) ? //|| Z_REG(dst_addr) : ((Z_MODE(res_addr) == IS_REG) ? Z_REG(res_addr) : ZREG_XMM0); //|| if (Z_DVAL_P(zv) == 0.0 && !is_signed(Z_DVAL_P(zv))) { //|| if (CAN_USE_AVX()) { //| vxorps xmm(dst_reg-ZREG_XMM0), xmm(dst_reg-ZREG_XMM0), xmm(dst_reg-ZREG_XMM0) //|| } else { //| xorps xmm(dst_reg-ZREG_XMM0), xmm(dst_reg-ZREG_XMM0) //|| } //| .if X64 //|| } else if (!IS_SIGNED_32BIT(zv)) { //| mov64 Ra(tmp_reg), ((uintptr_t)zv) //| SSE_AVX_INS movsd, vmovsd, xmm(dst_reg-ZREG_XMM0), qword [Ra(tmp_reg)] //| .endif //|| } else { //| SSE_AVX_INS movsd, vmovsd, xmm(dst_reg-ZREG_XMM0), qword [((uint32_t)(uintptr_t)zv)] //|| } //| DOUBLE_SET_ZVAL_DVAL dst_addr, ZREG_XMM0 //| DOUBLE_SET_ZVAL_DVAL res_addr, ZREG_XMM0 //|| } else if (Z_TYPE_P(zv) == IS_LONG && dst_def_info == MAY_BE_DOUBLE) { //|| if (Z_MODE(dst_addr) == IS_REG) { //| DOUBLE_GET_LONG Z_REG(dst_addr), Z_LVAL_P(zv), ZREG_R0 //| DOUBLE_SET_ZVAL_DVAL res_addr, Z_REG(dst_addr) //|| } else if (Z_MODE(res_addr) == IS_REG) { //| DOUBLE_GET_LONG Z_REG(res_addr), Z_LVAL_P(zv), ZREG_R0 //| DOUBLE_SET_ZVAL_DVAL dst_addr, Z_REG(res_addr) //|| } else { //| DOUBLE_GET_LONG ZREG_XMM0, Z_LVAL_P(zv), ZREG_R0 //| DOUBLE_SET_ZVAL_DVAL dst_addr, ZREG_XMM0 //| DOUBLE_SET_ZVAL_DVAL res_addr, ZREG_XMM0 //|| } //|| } else if (Z_LVAL_P(zv) == 0 && (Z_MODE(dst_addr) == IS_REG || Z_MODE(res_addr) == IS_REG)) { //|| if (Z_MODE(dst_addr) == IS_REG) { //| xor Ra(Z_REG(dst_addr)), Ra(Z_REG(dst_addr)) //| SET_ZVAL_LVAL res_addr, Ra(Z_REG(dst_addr)) //|| } else { //| xor Ra(Z_REG(res_addr)), Ra(Z_REG(res_addr)) //| SET_ZVAL_LVAL dst_addr, Ra(Z_REG(res_addr)) //|| } //|| } else { //| .if X64 //|| if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { //|| if (Z_MODE(dst_addr) == IS_REG) { //| mov64 Ra(Z_REG(dst_addr)), ((uintptr_t)Z_LVAL_P(zv)) //| SET_ZVAL_LVAL res_addr, Ra(Z_REG(dst_addr)) //|| } else if (Z_MODE(res_addr) == IS_REG) { //| mov64 Ra(Z_REG(res_addr)), ((uintptr_t)Z_LVAL_P(zv)) //| SET_ZVAL_LVAL dst_addr, Ra(Z_REG(res_addr)) //|| } else { //| mov64 Ra(tmp_reg), ((uintptr_t)Z_LVAL_P(zv)) //| SET_ZVAL_LVAL dst_addr, Ra(tmp_reg) //| SET_ZVAL_LVAL res_addr, Ra(tmp_reg) //|| } //|| } else if (Z_MODE(dst_addr) == IS_REG) { //| SET_ZVAL_LVAL dst_addr, Z_LVAL_P(zv) //| SET_ZVAL_LVAL res_addr, Ra(Z_REG(dst_addr)) //|| } else if (Z_MODE(res_addr) == IS_REG) { //| SET_ZVAL_LVAL res_addr, Z_LVAL_P(zv) //| SET_ZVAL_LVAL dst_addr, Ra(Z_REG(res_addr)) //|| } else { //| SET_ZVAL_LVAL dst_addr, Z_LVAL_P(zv) //| SET_ZVAL_LVAL res_addr, Z_LVAL_P(zv) //|| } //| .else //|| if (Z_MODE(dst_addr) == IS_REG) { //| SET_ZVAL_LVAL dst_addr, Z_LVAL_P(zv) //| SET_ZVAL_LVAL res_addr, Ra(Z_REG(dst_addr)) //|| } else if (Z_MODE(res_addr) == IS_REG) { //| SET_ZVAL_LVAL res_addr, Z_LVAL_P(zv) //| SET_ZVAL_LVAL dst_addr, Ra(Z_REG(res_addr)) //|| } else { //| SET_ZVAL_LVAL dst_addr, Z_LVAL_P(zv) //| SET_ZVAL_LVAL res_addr, Z_LVAL_P(zv) //|| } //| .endif //|| } //|| } //|| if (Z_MODE(dst_addr) == IS_MEM_ZVAL) { //|| if (dst_def_info == MAY_BE_DOUBLE) { //|| if ((dst_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != MAY_BE_DOUBLE) { //| SET_ZVAL_TYPE_INFO dst_addr, IS_DOUBLE //|| } //|| } else if (((dst_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (1<<Z_TYPE_P(zv))) || (dst_info & (MAY_BE_STRING|MAY_BE_ARRAY)) != 0) { //| SET_ZVAL_TYPE_INFO dst_addr, Z_TYPE_INFO_P(zv) //|| } //|| } //|| if (Z_MODE(res_addr) == IS_MEM_ZVAL) { //|| if (dst_def_info == MAY_BE_DOUBLE) { //| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE //|| } else { //| SET_ZVAL_TYPE_INFO res_addr, Z_TYPE_INFO_P(zv) //|| } //|| } //|.endmacro /* the same as above, but "src" may overlap with "tmp_reg1" */ //|.macro ZVAL_COPY_VALUE, dst_addr, dst_info, src_addr, src_info, tmp_reg1, tmp_reg2 //| ZVAL_COPY_VALUE_V dst_addr, dst_info, src_addr, src_info, tmp_reg1, tmp_reg2 //|| if ((src_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && //|| !(src_info & MAY_BE_GUARD) && //|| has_concrete_type(src_info & MAY_BE_ANY)) { //|| if (Z_MODE(dst_addr) == IS_MEM_ZVAL) { //|| if ((dst_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (src_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { //|| zend_uchar type = concrete_type(src_info); //| SET_ZVAL_TYPE_INFO dst_addr, type //|| } //|| } //|| } else { //| GET_ZVAL_TYPE_INFO Rd(tmp_reg1), src_addr //| SET_ZVAL_TYPE_INFO dst_addr, Rd(tmp_reg1) //|| } //|.endmacro //|.macro ZVAL_COPY_VALUE_V, dst_addr, dst_info, src_addr, src_info, tmp_reg1, tmp_reg2 //|| if (src_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { //|| if ((src_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { //|| if (Z_MODE(src_addr) == IS_REG) { //|| if (Z_MODE(dst_addr) != IS_REG || Z_REG(dst_addr) != Z_REG(src_addr)) { //| SET_ZVAL_LVAL dst_addr, Ra(Z_REG(src_addr)) //|| } //|| } else if (Z_MODE(dst_addr) == IS_REG) { //| GET_ZVAL_LVAL Z_REG(dst_addr), src_addr //|| } else { //| GET_ZVAL_LVAL tmp_reg2, src_addr //| SET_ZVAL_LVAL dst_addr, Ra(tmp_reg2) //|| } //|| } else if ((src_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { //|| if (Z_MODE(src_addr) == IS_REG) { //| DOUBLE_SET_ZVAL_DVAL dst_addr, Z_REG(src_addr) //|| } else if (Z_MODE(dst_addr) == IS_REG) { //| DOUBLE_GET_ZVAL_DVAL Z_REG(dst_addr), src_addr //|| } else { //| DOUBLE_GET_ZVAL_DVAL ZREG_XMM0, src_addr //| DOUBLE_SET_ZVAL_DVAL dst_addr, ZREG_XMM0 //|| } //|| } else if (!(src_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { //| GET_ZVAL_PTR Ra(tmp_reg2), src_addr //| SET_ZVAL_PTR dst_addr, Ra(tmp_reg2) //|| } else { //| .if X64 //| GET_ZVAL_PTR Ra(tmp_reg2), src_addr //| SET_ZVAL_PTR dst_addr, Ra(tmp_reg2) //| .else //|| if ((tmp_reg1 == tmp_reg2 || tmp_reg1 == Z_REG(src_addr))) { //| GET_ZVAL_W2 Ra(tmp_reg2), src_addr //| SET_ZVAL_W2 dst_addr, Ra(tmp_reg2) //| GET_ZVAL_PTR Ra(tmp_reg2), src_addr //| SET_ZVAL_PTR dst_addr, Ra(tmp_reg2) //|| } else { //| GET_ZVAL_PTR Ra(tmp_reg2), src_addr //| GET_ZVAL_W2 Ra(tmp_reg1), src_addr //| SET_ZVAL_PTR dst_addr, Ra(tmp_reg2) //| SET_ZVAL_W2 dst_addr, Ra(tmp_reg1) //|| } //| .endif //|| } //|| } //|.endmacro //|.macro ZVAL_COPY_VALUE_2, dst_addr, dst_info, res_addr, src_addr, src_info, tmp_reg1, tmp_reg2 //|| if (src_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { //|| if ((src_info & MAY_BE_ANY) == MAY_BE_LONG) { //|| if (Z_MODE(src_addr) == IS_REG) { //|| if (Z_MODE(dst_addr) != IS_REG || Z_REG(dst_addr) != Z_REG(src_addr)) { //| SET_ZVAL_LVAL dst_addr, Ra(Z_REG(src_addr)) //|| } //|| if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(src_addr)) { //| SET_ZVAL_LVAL res_addr, Ra(Z_REG(src_addr)) //|| } //|| } else if (Z_MODE(dst_addr) == IS_REG) { //| GET_ZVAL_LVAL Z_REG(dst_addr), src_addr //|| if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(dst_addr)) { //| SET_ZVAL_LVAL res_addr, Ra(Z_REG(dst_addr)) //|| } //|| } else if (Z_MODE(res_addr) == IS_REG) { //| GET_ZVAL_LVAL Z_REG(res_addr), src_addr //| SET_ZVAL_LVAL dst_addr, Ra(Z_REG(res_addr)) //|| } else { //| GET_ZVAL_LVAL tmp_reg2, src_addr //| SET_ZVAL_LVAL dst_addr, Ra(tmp_reg2) //| SET_ZVAL_LVAL res_addr, Ra(tmp_reg2) //|| } //|| } else if ((src_info & MAY_BE_ANY) == MAY_BE_DOUBLE) { //|| if (Z_MODE(src_addr) == IS_REG) { //| DOUBLE_SET_ZVAL_DVAL dst_addr, Z_REG(src_addr) //| DOUBLE_SET_ZVAL_DVAL res_addr, Z_REG(src_addr) //|| } else if (Z_MODE(dst_addr) == IS_REG) { //| DOUBLE_GET_ZVAL_DVAL Z_REG(dst_addr), src_addr //| DOUBLE_SET_ZVAL_DVAL res_addr, Z_REG(dst_addr) //|| } else if (Z_MODE(res_addr) == IS_REG) { //| DOUBLE_GET_ZVAL_DVAL Z_REG(res_addr), src_addr //| DOUBLE_SET_ZVAL_DVAL dst_addr, Z_REG(res_addr) //|| } else { //| DOUBLE_GET_ZVAL_DVAL ZREG_XMM0, src_addr //| DOUBLE_SET_ZVAL_DVAL dst_addr, ZREG_XMM0 //| DOUBLE_SET_ZVAL_DVAL res_addr, ZREG_XMM0 //|| } //|| } else if (!(src_info & MAY_BE_DOUBLE)) { //| GET_ZVAL_PTR Ra(tmp_reg2), src_addr //| SET_ZVAL_PTR dst_addr, Ra(tmp_reg2) //| SET_ZVAL_PTR res_addr, Ra(tmp_reg2) //|| } else { //| .if X64 //| GET_ZVAL_PTR Ra(tmp_reg2), src_addr //| SET_ZVAL_PTR dst_addr, Ra(tmp_reg2) //| SET_ZVAL_PTR res_addr, Ra(tmp_reg2) //| .else //|| if (tmp_reg1 == tmp_reg2 || tmp_reg1 == Z_REG(src_addr)) { //| GET_ZVAL_W2 Ra(tmp_reg2), src_addr //| SET_ZVAL_W2 dst_addr, Ra(tmp_reg2) //| SET_ZVAL_W2 res_addr, Ra(tmp_reg2) //| GET_ZVAL_PTR Ra(tmp_reg2), src_addr //| SET_ZVAL_PTR dst_addr, Ra(tmp_reg2) //| SET_ZVAL_PTR res_addr, Ra(tmp_reg2) //|| } else { //| GET_ZVAL_PTR Ra(tmp_reg2), src_addr //| GET_ZVAL_W2 Ra(tmp_reg1), src_addr //| SET_ZVAL_PTR dst_addr, Ra(tmp_reg2) //| SET_ZVAL_PTR res_addr, Ra(tmp_reg2) //| SET_ZVAL_W2 dst_addr, Ra(tmp_reg1) //| SET_ZVAL_W2 res_addr, Ra(tmp_reg1) //|| } //| .endif //|| } //|| } //|| if ((src_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && //|| has_concrete_type(src_info & MAY_BE_ANY)) { //|| zend_uchar type = concrete_type(src_info); //|| if (Z_MODE(dst_addr) == IS_MEM_ZVAL) { //|| if ((dst_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (src_info & (MAY_BE_ANY|MAY_BE_UNDEF))) { //| SET_ZVAL_TYPE_INFO dst_addr, type //|| } //|| } //|| if (Z_MODE(res_addr) == IS_MEM_ZVAL) { //| SET_ZVAL_TYPE_INFO res_addr, type //|| } //|| } else { //| GET_ZVAL_TYPE_INFO Rd(tmp_reg1), src_addr //| SET_ZVAL_TYPE_INFO dst_addr, Rd(tmp_reg1) //| SET_ZVAL_TYPE_INFO res_addr, Rd(tmp_reg1) //|| } //|.endmacro //|.macro IF_UNDEF, type_reg, label //| test type_reg, type_reg //| je label //|.endmacro //|.macro IF_TYPE, type, val, label //| cmp type, val //| je label //|.endmacro //|.macro IF_NOT_TYPE, type, val, label //| cmp type, val //| jne label //|.endmacro //|.macro IF_Z_TYPE, zv, val, label //| IF_TYPE byte [zv+offsetof(zval, u1.v.type)], val, label //|.endmacro //|.macro IF_NOT_Z_TYPE, zv, val, label //| IF_NOT_TYPE byte [zv+offsetof(zval, u1.v.type)], val, label //|.endmacro //|.macro CMP_ZVAL_TYPE, addr, val //|| ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); //| cmp byte [Ra(Z_REG(addr))+Z_OFFSET(addr)+offsetof(zval, u1.v.type)], val //|.endmacro //|.macro IF_ZVAL_TYPE, addr, val, label //|| ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); //| IF_TYPE byte [Ra(Z_REG(addr))+Z_OFFSET(addr)+offsetof(zval, u1.v.type)], val, label //|.endmacro //|.macro IF_NOT_ZVAL_TYPE, addr, val, label //|| ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); //| IF_NOT_TYPE byte [Ra(Z_REG(addr))+Z_OFFSET(addr)+offsetof(zval, u1.v.type)], val, label //|.endmacro //|.macro IF_FLAGS, type_flags, mask, label //| test type_flags, mask //| jnz label //|.endmacro //|.macro IF_NOT_FLAGS, type_flags, mask, label //| test type_flags, mask //| jz label //|.endmacro //|.macro IF_REFCOUNTED, type_flags, label //| IF_FLAGS type_flags, IS_TYPE_REFCOUNTED, label //|.endmacro //|.macro IF_NOT_REFCOUNTED, type_flags, label //| //IF_NOT_FLAGS type_flags, IS_TYPE_REFCOUNTED, label //| test type_flags, type_flags //| jz label //|.endmacro //|.macro IF_ZVAL_FLAGS, addr, mask, label //|| ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); //| IF_FLAGS byte [Ra(Z_REG(addr))+Z_OFFSET(addr)+offsetof(zval, u1.v.type_flags)], mask, label //|.endmacro //|.macro IF_NOT_ZVAL_FLAGS, addr, mask, label //|| ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); //| IF_NOT_FLAGS byte [Ra(Z_REG(addr))+Z_OFFSET(addr)+offsetof(zval, u1.v.type_flags)], mask, label //|.endmacro //|.macro IF_ZVAL_REFCOUNTED, addr, label //| IF_ZVAL_FLAGS addr, IS_TYPE_REFCOUNTED, label //|.endmacro //|.macro IF_NOT_ZVAL_REFCOUNTED, addr, label //| IF_NOT_ZVAL_FLAGS addr, IS_TYPE_REFCOUNTED, label //|.endmacro //|.macro IF_NOT_ZVAL_COLLECTABLE, addr, label //| IF_NOT_ZVAL_FLAGS addr, IS_TYPE_COLLECTABLE, label //|.endmacro //|.macro GC_ADDREF, zv //| add dword [zv], 1 //|.endmacro //|.macro GC_DELREF, zv //| sub dword [zv], 1 //|.endmacro //|.macro IF_GC_MAY_NOT_LEAK, ptr, label //| test dword [ptr+4],(GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT)) //| jne label //|.endmacro //|.macro ADDREF_CONST, zv, tmp_reg //| .if X64 //|| if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { //| mov64 tmp_reg, ((uintptr_t)Z_LVAL_P(zv)) //| add dword [tmp_reg], 1 //|| } else { //| add dword [Z_LVAL_P(zv)], 1 //|| } //| .else //| add dword [Z_LVAL_P(zv)], 1 //| .endif //|.endmacro //|.macro ADDREF_CONST_2, zv, tmp_reg //| .if X64 //|| if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { //| mov64 tmp_reg, ((uintptr_t)Z_LVAL_P(zv)) //| add dword [tmp_reg], 2 //|| } else { //| add dword [Z_LVAL_P(zv)], 2 //|| } //| .else //| add dword [Z_LVAL_P(zv)], 2 //| .endif //|.endmacro //|.macro TRY_ADDREF, val_info, type_flags_reg, value_ptr_reg //|| if (val_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { //|| if (val_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| IF_NOT_REFCOUNTED type_flags_reg, >1 //|| } //| GC_ADDREF value_ptr_reg //|1: //|| } //|.endmacro //|.macro TRY_ADDREF_2, val_info, type_flags_reg, value_ptr_reg //|| if (val_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { //|| if (val_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| IF_NOT_REFCOUNTED type_flags_reg, >1 //|| } //| add dword [value_ptr_reg], 2 //|1: //|| } //|.endmacro //|.macro ZVAL_DEREF, reg, info //|| if (info & MAY_BE_REF) { //| IF_NOT_Z_TYPE, reg, IS_REFERENCE, >1 //| GET_Z_PTR reg, reg //| add reg, offsetof(zend_reference, val) //|1: //|| } //|.endmacro //|.macro SET_EX_OPLINE, op, tmp_reg //|| if (op == last_valid_opline) { //|| zend_jit_use_last_valid_opline(); //| SAVE_IP //|| } else { //| ADDR_STORE aword EX->opline, op, tmp_reg //|| if (!GCC_GLOBAL_REGS) { //|| zend_jit_reset_last_valid_opline(); //|| } //|| } //|.endmacro // zval should be in FCARG1a //|.macro ZVAL_DTOR_FUNC, var_info, opline // arg1 must be in FCARG1a //|| do { //|| if (!((var_info) & MAY_BE_GUARD) //|| && has_concrete_type((var_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //|| zend_uchar type = concrete_type((var_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); //|| if (type == IS_STRING && !ZEND_DEBUG) { //| EXT_CALL _efree, r0 //|| break; //|| } else if (type == IS_ARRAY) { //|| if ((var_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { //|| if (opline && ((var_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { //| SET_EX_OPLINE opline, r0 //|| } //| EXT_CALL zend_array_destroy, r0 //|| } else { //| EXT_CALL zend_jit_array_free, r0 //|| } //|| break; //|| } else if (type == IS_OBJECT) { //|| if (opline) { //| SET_EX_OPLINE opline, r0 //|| } //| EXT_CALL zend_objects_store_del, r0 //|| break; //|| } //|| } //|| if (opline) { //| SET_EX_OPLINE opline, r0 //|| } //| EXT_CALL rc_dtor_func, r0 //|| } while(0); //|.endmacro //|.macro ZVAL_PTR_DTOR, addr, op_info, gc, cold, opline //|| if ((op_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { //|| if ((op_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| // if (Z_REFCOUNTED_P(cv)) { //|| if (cold) { //| IF_ZVAL_REFCOUNTED addr, >1 //|.cold_code //|1: //|| } else { //| IF_NOT_ZVAL_REFCOUNTED addr, >4 //|| } //|| } //| // if (!Z_DELREF_P(cv)) { //| GET_ZVAL_PTR FCARG1a, addr //| GC_DELREF FCARG1a //|| if (((op_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op_info)) { //|| if (((op_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op_info)) { //|| if (gc && (((op_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op_info) && ((op_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { //| jnz >3 //|| } else { //| jnz >4 //|| } //|| } //| // zval_dtor_func(r); //| ZVAL_DTOR_FUNC op_info, opline //|| if (gc && (((op_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op_info) && ((op_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { //| jmp >4 //|| } //|3: //|| } //|| if (gc && (((op_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op_info) && ((op_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { //|| if ((op_info) & (MAY_BE_REF|MAY_BE_GUARD)) { //|| zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); //| IF_NOT_ZVAL_TYPE addr, IS_REFERENCE, >1 //| IF_NOT_ZVAL_COLLECTABLE ref_addr, >4 //| GET_ZVAL_PTR FCARG1a, ref_addr //|1: //|| } //| IF_GC_MAY_NOT_LEAK FCARG1a, >4 //| // gc_possible_root(Z_COUNTED_P(z)) //| EXT_CALL gc_possible_root, r0 //|| } //|| if (cold && ((op_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { //| jmp >4 //|.code //|| } //|4: //|| } //|.endmacro //|.macro FREE_OP, op_type, op, op_info, cold, opline //|| if (op_type & (IS_VAR|IS_TMP_VAR)) { //| ZVAL_PTR_DTOR ZEND_ADDR_MEM_ZVAL(ZREG_FP, op.var), op_info, 0, cold, opline //|| } //|.endmacro //|.macro SEPARATE_ARRAY, addr, op_info, cold //|| if (RC_MAY_BE_N(op_info)) { //|| if (Z_REG(addr) != ZREG_FP) { //| GET_ZVAL_LVAL ZREG_R0, addr //|| if (RC_MAY_BE_1(op_info)) { //| cmp dword [r0], 1 // if (GC_REFCOUNT() > 1) //| jbe >2 //|| } //|| if (Z_REG(addr) != ZREG_FCARG1 || Z_OFFSET(addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, addr //|| } //| EXT_CALL zend_jit_zval_array_dup, r0 //|2: //| mov FCARG1a, r0 //|| } else { //| GET_ZVAL_LVAL ZREG_FCARG1, addr //|| if (RC_MAY_BE_1(op_info)) { //| cmp dword [FCARG1a], 1 // if (GC_REFCOUNT() > 1) //|| if (cold) { //| ja >1 //|.cold_code //|1: //|| } else { //| jbe >2 //|| } //|| } //| IF_NOT_ZVAL_REFCOUNTED addr, >1 //| GC_DELREF FCARG1a //|1: //| EXT_CALL zend_array_dup, r0 //| SET_ZVAL_PTR addr, r0 //| SET_ZVAL_TYPE_INFO addr, IS_ARRAY_EX //| mov FCARG1a, r0 //|| if (RC_MAY_BE_1(op_info)) { //|| if (cold) { //| jmp >2 //|.code //|| } //|| } //|2: //|| } //|| } else { //| GET_ZVAL_LVAL ZREG_FCARG1, addr //|| } //|.endmacro //|.macro EFREE_REG_REFERENCE //||#if ZEND_DEBUG //| xor FCARG2a, FCARG2a // filename //| .if X64WIN //| xor CARG3d, CARG3d // lineno //| xor CARG4, CARG4 //| mov aword A5, 0 //| EXT_CALL _efree, r0 //| .elif X64 //| xor CARG3d, CARG3d // lineno //| xor CARG4, CARG4 //| xor CARG5, CARG5 //| EXT_CALL _efree, r0 //| .else //| sub r4, 4 //| push 0 //| push 0 //| push 0 // lineno //| EXT_CALL _efree, r0 //| add r4, 4 //| .endif //||#else //||#ifdef HAVE_BUILTIN_CONSTANT_P //| EXT_CALL _efree_32, r0 //||#else //| EXT_CALL _efree, r0 //||#endif //||#endif //|.endmacro //|.macro EFREE_REFERENCE, ptr //| mov FCARG1a, ptr //| EFREE_REG_REFERENCE //|.endmacro //|.macro EMALLOC, size, op_array, opline //||#if ZEND_DEBUG //|| const char *filename = op_array->filename ? op_array->filename->val : NULL; //| mov FCARG1a, size //| LOAD_ADDR FCARG2a, filename //| .if X64WIN //| mov CARG3d, opline->lineno //| xor CARG4, CARG4 //| mov aword A5, 0 //| EXT_CALL _emalloc, r0 //| .elif X64 //| mov CARG3d, opline->lineno //| xor CARG4, CARG4 //| xor CARG5, CARG5 //| EXT_CALL _emalloc, r0 //| .else //| sub r4, 4 //| push 0 //| push 0 //| push opline->lineno //| EXT_CALL _emalloc, r0 //| add r4, 4 //| .endif //||#else //||#ifdef HAVE_BUILTIN_CONSTANT_P //|| if (size > 24 && size <= 32) { //| EXT_CALL _emalloc_32, r0 //|| } else { //| mov FCARG1a, size //| EXT_CALL _emalloc, r0 //|| } //||#else //| mov FCARG1a, size //| EXT_CALL _emalloc, r0 //||#endif //||#endif //|.endmacro //|.macro OBJ_RELEASE, reg, exit_label //| GC_DELREF Ra(reg) //| jne >1 //| // zend_objects_store_del(obj); //|| if (reg != ZREG_FCARG1) { //| mov FCARG1a, Ra(reg) //|| } //| EXT_CALL zend_objects_store_del, r0 //| jmp exit_label //|1: //| IF_GC_MAY_NOT_LEAK Ra(reg), >1 //| // gc_possible_root(obj) //|| if (reg != ZREG_FCARG1) { //| mov FCARG1a, Ra(reg) //|| } //| EXT_CALL gc_possible_root, r0 //|1: //|.endmacro //|.macro UNDEFINED_OFFSET, opline //|| if (opline == last_valid_opline) { //|| zend_jit_use_last_valid_opline(); //| call ->undefined_offset_ex //|| } else { //| SET_EX_OPLINE opline, r0 //| call ->undefined_offset //|| } //|.endmacro //|.macro UNDEFINED_INDEX, opline //|| if (opline == last_valid_opline) { //|| zend_jit_use_last_valid_opline(); //| call ->undefined_index_ex //|| } else { //| SET_EX_OPLINE opline, r0 //| call ->undefined_index //|| } //|.endmacro //|.macro CANNOT_ADD_ELEMENT, opline //|| if (opline == last_valid_opline) { //|| zend_jit_use_last_valid_opline(); //| call ->cannot_add_element_ex //|| } else { //| SET_EX_OPLINE opline, r0 //| call ->cannot_add_element //|| } //|.endmacro //|.macro ENDBR //||#if defined (__CET__) && (__CET__ & 1) != 0 //| .if X64 //| endbr64 //| .else //| endbr32 //| .endif //||#endif //|.endmacro #if defined (__CET__) && (__CET__ & 1) != 0 # define ENDBR_PADDING 4 #else # define ENDBR_PADDING 0 #endif static bool reuse_ip = 0; static bool delayed_call_chain = 0; static uint32_t delayed_call_level = 0; static const zend_op *last_valid_opline = NULL; static bool use_last_vald_opline = 0; static bool track_last_valid_opline = 0; static int jit_return_label = -1; static uint32_t current_trace_num = 0; static uint32_t allowed_opt_flags = 0; static void zend_jit_track_last_valid_opline(void) { use_last_vald_opline = 0; track_last_valid_opline = 1; } static void zend_jit_use_last_valid_opline(void) { if (track_last_valid_opline) { use_last_vald_opline = 1; track_last_valid_opline = 0; } } static bool zend_jit_trace_uses_initial_ip(void) { return use_last_vald_opline; } static void zend_jit_set_last_valid_opline(const zend_op *target_opline) { if (!reuse_ip) { track_last_valid_opline = 0; last_valid_opline = target_opline; } } static void zend_jit_reset_last_valid_opline(void) { track_last_valid_opline = 0; last_valid_opline = NULL; } static void zend_jit_start_reuse_ip(void) { zend_jit_reset_last_valid_opline(); reuse_ip = 1; } static int zend_jit_reuse_ip(dasm_State **Dst) { if (!reuse_ip) { zend_jit_start_reuse_ip(); //| // call = EX(call); //| mov RX, EX->call dasm_put(Dst, 0, Dt1(->call)); #line 1702 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static void zend_jit_stop_reuse_ip(void) { reuse_ip = 0; } static int zend_jit_interrupt_handler_stub(dasm_State **Dst) { //|->interrupt_handler: //| SAVE_IP dasm_put(Dst, 5); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } #line 1715 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| //EG(vm_interrupt) = 0; //| MEM_STORE_ZTS byte, executor_globals, vm_interrupt, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.vm_interrupt)) { dasm_put(Dst, 13, &executor_globals.vm_interrupt); } else { dasm_put(Dst, 19, (unsigned int)(((ptrdiff_t)&executor_globals.vm_interrupt)), (unsigned int)((((ptrdiff_t)&executor_globals.vm_interrupt))>>32)); } #line 1717 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| //if (EG(timed_out)) { //| MEM_CMP_ZTS byte, executor_globals, timed_out, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.timed_out)) { dasm_put(Dst, 27, &executor_globals.timed_out); } else { dasm_put(Dst, 33, (unsigned int)(((ptrdiff_t)&executor_globals.timed_out)), (unsigned int)((((ptrdiff_t)&executor_globals.timed_out))>>32)); } #line 1719 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| je >1 //| //zend_timeout(); //| EXT_CALL zend_timeout, r0 dasm_put(Dst, 41); if (MAY_USE_32BIT_ADDR(zend_timeout)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_timeout)); } else { if (IS_SIGNED_32BIT(zend_timeout)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_timeout)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_timeout)), (unsigned int)((((ptrdiff_t)zend_timeout))>>32)); } dasm_put(Dst, 59); } #line 1722 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| //} else if (zend_interrupt_function) { dasm_put(Dst, 63); #line 1724 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (zend_interrupt_function) { //| //zend_interrupt_function(execute_data); //|.if X64 //| mov CARG1, FP //| EXT_CALL zend_interrupt_function, r0 dasm_put(Dst, 66); if (MAY_USE_32BIT_ADDR(zend_interrupt_function)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_interrupt_function)); } else { if (IS_SIGNED_32BIT(zend_interrupt_function)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_interrupt_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_interrupt_function)), (unsigned int)((((ptrdiff_t)zend_interrupt_function))>>32)); } dasm_put(Dst, 59); } #line 1729 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| mov aword A1, FP //| EXT_CALL zend_interrupt_function, r0 //|.endif //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.exception)) { dasm_put(Dst, 71, &executor_globals.exception); } else { dasm_put(Dst, 78, (unsigned int)(((ptrdiff_t)&executor_globals.exception)), (unsigned int)((((ptrdiff_t)&executor_globals.exception))>>32)); } #line 1734 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| je >1 //| EXT_CALL zend_jit_exception_in_interrupt_handler_helper, r0 dasm_put(Dst, 41); if (MAY_USE_32BIT_ADDR(zend_jit_exception_in_interrupt_handler_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_exception_in_interrupt_handler_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_exception_in_interrupt_handler_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_exception_in_interrupt_handler_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_exception_in_interrupt_handler_helper)), (unsigned int)((((ptrdiff_t)zend_jit_exception_in_interrupt_handler_helper))>>32)); } dasm_put(Dst, 59); } #line 1736 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| //ZEND_VM_ENTER(); //| //execute_data = EG(current_execute_data); //| MEM_LOAD_ZTS FP, aword, executor_globals, current_execute_data, r0 dasm_put(Dst, 63); if (IS_SIGNED_32BIT(&executor_globals.current_execute_data)) { dasm_put(Dst, 87, &executor_globals.current_execute_data); } else { dasm_put(Dst, 93, (unsigned int)(((ptrdiff_t)&executor_globals.current_execute_data)), (unsigned int)((((ptrdiff_t)&executor_globals.current_execute_data))>>32)); } #line 1740 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| LOAD_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 0, Dt1(->opline)); } #line 1741 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| //ZEND_VM_CONTINUE() if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { //| ADD_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 101); #endif #line 1745 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 1746 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (GCC_GLOBAL_REGS) { //| add r4, SPAD // stack alignment //| JMP_IP dasm_put(Dst, 119); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 1749 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov FP, aword T2 // restore FP //| mov RX, aword T3 // restore IP //| add r4, NR_SPAD // stack alignment //| mov r0, 1 // ZEND_VM_ENTER //| ret dasm_put(Dst, 124); #line 1755 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_exception_handler_stub(dasm_State **Dst) { //|->exception_handler: dasm_put(Dst, 147); #line 1763 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { const void *handler = zend_get_opcode_handler_func(EG(exception_op)); //| ADD_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 101); #endif #line 1767 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL handler, r0 if (MAY_USE_32BIT_ADDR(handler)) { dasm_put(Dst, 46, (ptrdiff_t)(handler)); } else { if (IS_SIGNED_32BIT(handler)) { dasm_put(Dst, 49, ((ptrdiff_t)handler)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); } dasm_put(Dst, 59); } #line 1768 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 1769 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { const void *handler = EG(exception_op)->handler; if (GCC_GLOBAL_REGS) { //| add r4, SPAD // stack alignment //| EXT_JMP handler, r0 dasm_put(Dst, 119); if (MAY_USE_32BIT_ADDR(handler)) { dasm_put(Dst, 150, (ptrdiff_t)(handler)); } else { if (IS_SIGNED_32BIT(handler)) { dasm_put(Dst, 49, ((ptrdiff_t)handler)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); } dasm_put(Dst, 154); } #line 1775 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov FCARG1a, FP //| EXT_CALL handler, r0 dasm_put(Dst, 66); if (MAY_USE_32BIT_ADDR(handler)) { dasm_put(Dst, 46, (ptrdiff_t)(handler)); } else { if (IS_SIGNED_32BIT(handler)) { dasm_put(Dst, 49, ((ptrdiff_t)handler)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); } dasm_put(Dst, 59); } #line 1778 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FP, aword T2 // restore FP //| mov RX, aword T3 // restore IP //| add r4, NR_SPAD // stack alignment //| test eax, eax //| jl >1 //| mov r0, 1 // ZEND_VM_ENTER //|1: //| ret dasm_put(Dst, 158); #line 1786 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } return 1; } static int zend_jit_exception_handler_undef_stub(dasm_State **Dst) { //|->exception_handler_undef: //| MEM_LOAD_ZTS r0, aword, executor_globals, opline_before_exception, r0 dasm_put(Dst, 189); if (IS_SIGNED_32BIT(&executor_globals.opline_before_exception)) { dasm_put(Dst, 192, &executor_globals.opline_before_exception); } else { dasm_put(Dst, 198, (unsigned int)(((ptrdiff_t)&executor_globals.opline_before_exception)), (unsigned int)((((ptrdiff_t)&executor_globals.opline_before_exception))>>32)); } #line 1796 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test byte OP:r0->result_type, (IS_TMP_VAR|IS_VAR) //| jz >1 //| mov eax, dword OP:r0->result.var //| SET_Z_TYPE_INFO FP + r0, IS_UNDEF //|1: //| jmp ->exception_handler dasm_put(Dst, 206, Dt2(->result_type), (IS_TMP_VAR|IS_VAR), Dt2(->result.var), offsetof(zval,u1.type_info), IS_UNDEF); #line 1802 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_exception_handler_free_op1_op2_stub(dasm_State **Dst) { //|->exception_handler_free_op1_op2: //| UNDEF_OPLINE_RESULT_IF_USED //| test byte OP:RX->op1_type, (IS_TMP_VAR|IS_VAR) //| je >9 //| mov eax, dword OP:RX->op1.var //| add r0, FP //| ZVAL_PTR_DTOR ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0), MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF, 0, 0, NULL dasm_put(Dst, 232, Dt2(->result_type), (IS_TMP_VAR|IS_VAR), Dt2(->result.var), offsetof(zval,u1.type_info), IS_UNDEF, Dt2(->op1_type), (IS_TMP_VAR|IS_VAR), Dt2(->op1.var)); if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))); if (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || RC_MAY_BE_1(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF)) { if (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF)) { if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) && has_concrete_type((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } #line 1816 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|9: //| test byte OP:RX->op2_type, (IS_TMP_VAR|IS_VAR) //| je >9 //| mov eax, dword OP:RX->op2.var //| add r0, FP //| ZVAL_PTR_DTOR ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0), MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF, 0, 0, NULL dasm_put(Dst, 391, Dt2(->op2_type), (IS_TMP_VAR|IS_VAR), Dt2(->op2.var)); if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))); if (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || RC_MAY_BE_1(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF)) { if (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF)) { if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) && has_concrete_type((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } #line 1822 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|9: //| jmp ->exception_handler dasm_put(Dst, 412); #line 1824 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_exception_handler_free_op2_stub(dasm_State **Dst) { //|->exception_handler_free_op2: //| MEM_LOAD_ZTS RX, aword, executor_globals, opline_before_exception, r0 dasm_put(Dst, 419); if (IS_SIGNED_32BIT(&executor_globals.opline_before_exception)) { dasm_put(Dst, 422, &executor_globals.opline_before_exception); } else { dasm_put(Dst, 428, (unsigned int)(((ptrdiff_t)&executor_globals.opline_before_exception)), (unsigned int)((((ptrdiff_t)&executor_globals.opline_before_exception))>>32)); } #line 1831 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| UNDEF_OPLINE_RESULT_IF_USED //| test byte OP:RX->op2_type, (IS_TMP_VAR|IS_VAR) //| je >9 //| mov eax, dword OP:RX->op2.var //| add r0, FP //| ZVAL_PTR_DTOR ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0), MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF, 0, 0, NULL dasm_put(Dst, 234, Dt2(->result_type), (IS_TMP_VAR|IS_VAR), Dt2(->result.var), offsetof(zval,u1.type_info), IS_UNDEF, Dt2(->op2_type), (IS_TMP_VAR|IS_VAR), Dt2(->op2.var)); if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))); if (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || RC_MAY_BE_1(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF)) { if (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF)) { if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) && has_concrete_type((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } #line 1837 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|9: //| jmp ->exception_handler dasm_put(Dst, 412); #line 1839 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_leave_function_stub(dasm_State **Dst) { //|->leave_function_handler: //| mov FCARG1d, dword [FP + offsetof(zend_execute_data, This.u1.type_info)] dasm_put(Dst, 436, offsetof(zend_execute_data, This.u1.type_info)); #line 1846 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { //| test FCARG1d, ZEND_CALL_TOP //| jnz >1 //| EXT_CALL zend_jit_leave_nested_func_helper, r0 dasm_put(Dst, 443, ZEND_CALL_TOP); if (MAY_USE_32BIT_ADDR(zend_jit_leave_nested_func_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_leave_nested_func_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_leave_nested_func_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_leave_nested_func_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_leave_nested_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_leave_nested_func_helper))>>32)); } dasm_put(Dst, 59); } #line 1850 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ADD_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 101); #endif #line 1851 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 1852 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| EXT_CALL zend_jit_leave_top_func_helper, r0 dasm_put(Dst, 63); if (MAY_USE_32BIT_ADDR(zend_jit_leave_top_func_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_leave_top_func_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_leave_top_func_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_leave_top_func_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_leave_top_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_leave_top_func_helper))>>32)); } dasm_put(Dst, 59); } #line 1854 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ADD_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 101); #endif #line 1855 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 1856 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (GCC_GLOBAL_REGS) { //| add r4, SPAD dasm_put(Dst, 119); #line 1859 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov FCARG2a, FP //| mov FP, aword T2 // restore FP //| mov RX, aword T3 // restore IP //| add r4, NR_SPAD dasm_put(Dst, 452); #line 1864 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| test FCARG1d, ZEND_CALL_TOP //| jnz >1 //| EXT_JMP zend_jit_leave_nested_func_helper, r0 dasm_put(Dst, 443, ZEND_CALL_TOP); if (MAY_USE_32BIT_ADDR(zend_jit_leave_nested_func_helper)) { dasm_put(Dst, 150, (ptrdiff_t)(zend_jit_leave_nested_func_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_leave_nested_func_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_leave_nested_func_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_leave_nested_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_leave_nested_func_helper))>>32)); } dasm_put(Dst, 154); } #line 1868 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| EXT_JMP zend_jit_leave_top_func_helper, r0 dasm_put(Dst, 63); if (MAY_USE_32BIT_ADDR(zend_jit_leave_top_func_helper)) { dasm_put(Dst, 150, (ptrdiff_t)(zend_jit_leave_top_func_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_leave_top_func_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_leave_top_func_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_leave_top_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_leave_top_func_helper))>>32)); } dasm_put(Dst, 154); } #line 1870 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_leave_throw_stub(dasm_State **Dst) { //|->leave_throw_handler: //| // if (opline->opcode != ZEND_HANDLE_EXCEPTION) { dasm_put(Dst, 471); #line 1879 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (GCC_GLOBAL_REGS) { //| cmp byte OP:IP->opcode, ZEND_HANDLE_EXCEPTION //| je >5 //| // EG(opline_before_exception) = opline; //| MEM_STORE_ZTS aword, executor_globals, opline_before_exception, IP, r0 dasm_put(Dst, 474, Dt2(->opcode), ZEND_HANDLE_EXCEPTION); if (IS_SIGNED_32BIT(&executor_globals.opline_before_exception)) { dasm_put(Dst, 484, &executor_globals.opline_before_exception); } else { dasm_put(Dst, 490, (unsigned int)(((ptrdiff_t)&executor_globals.opline_before_exception)), (unsigned int)((((ptrdiff_t)&executor_globals.opline_before_exception))>>32)); } #line 1884 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|5: //| // opline = EG(exception_op); //| LOAD_IP_ADDR_ZTS executor_globals, exception_op dasm_put(Dst, 498); if (GCC_GLOBAL_REGS) { if (IS_SIGNED_32BIT(&executor_globals.exception_op)) { dasm_put(Dst, 501, ((ptrdiff_t)&executor_globals.exception_op)); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)&executor_globals.exception_op)), (unsigned int)((((ptrdiff_t)&executor_globals.exception_op))>>32)); } } else { if (IS_SIGNED_32BIT(&executor_globals.exception_op)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)&executor_globals.exception_op)); } else { dasm_put(Dst, 511, (unsigned int)(((ptrdiff_t)&executor_globals.exception_op)), (unsigned int)((((ptrdiff_t)&executor_globals.exception_op))>>32), Dt1(->opline)); } } #line 1887 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // HANDLE_EXCEPTION() //| jmp ->exception_handler dasm_put(Dst, 227); #line 1889 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| GET_IP FCARG1a if (GCC_GLOBAL_REGS) { dasm_put(Dst, 520); } else { dasm_put(Dst, 525, Dt1(->opline)); } #line 1891 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp byte OP:FCARG1a->opcode, ZEND_HANDLE_EXCEPTION //| je >5 //| // EG(opline_before_exception) = opline; //| MEM_STORE_ZTS aword, executor_globals, opline_before_exception, FCARG1a, r0 dasm_put(Dst, 475, Dt2(->opcode), ZEND_HANDLE_EXCEPTION); if (IS_SIGNED_32BIT(&executor_globals.opline_before_exception)) { dasm_put(Dst, 530, &executor_globals.opline_before_exception); } else { dasm_put(Dst, 536, (unsigned int)(((ptrdiff_t)&executor_globals.opline_before_exception)), (unsigned int)((((ptrdiff_t)&executor_globals.opline_before_exception))>>32)); } #line 1895 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|5: //| // opline = EG(exception_op); //| LOAD_IP_ADDR_ZTS executor_globals, exception_op dasm_put(Dst, 498); if (GCC_GLOBAL_REGS) { if (IS_SIGNED_32BIT(&executor_globals.exception_op)) { dasm_put(Dst, 501, ((ptrdiff_t)&executor_globals.exception_op)); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)&executor_globals.exception_op)), (unsigned int)((((ptrdiff_t)&executor_globals.exception_op))>>32)); } } else { if (IS_SIGNED_32BIT(&executor_globals.exception_op)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)&executor_globals.exception_op)); } else { dasm_put(Dst, 511, (unsigned int)(((ptrdiff_t)&executor_globals.exception_op)), (unsigned int)((((ptrdiff_t)&executor_globals.exception_op))>>32), Dt1(->opline)); } } #line 1898 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FP, aword T2 // restore FP //| mov RX, aword T3 // restore IP //| add r4, NR_SPAD // stack alignment //| mov r0, 2 // ZEND_VM_LEAVE //| ret dasm_put(Dst, 544); #line 1903 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_icall_throw_stub(dasm_State **Dst) { //|->icall_throw_handler: //| // zend_rethrow_exception(zend_execute_data *execute_data) //| mov IP, aword EX->opline //| // if (EX(opline)->opcode != ZEND_HANDLE_EXCEPTION) { //| cmp byte OP:IP->opcode, ZEND_HANDLE_EXCEPTION //| je >1 //| // EG(opline_before_exception) = opline; //| MEM_STORE_ZTS aword, executor_globals, opline_before_exception, IP, r0 dasm_put(Dst, 567, Dt1(->opline), Dt2(->opcode), ZEND_HANDLE_EXCEPTION); if (IS_SIGNED_32BIT(&executor_globals.opline_before_exception)) { dasm_put(Dst, 484, &executor_globals.opline_before_exception); } else { dasm_put(Dst, 490, (unsigned int)(((ptrdiff_t)&executor_globals.opline_before_exception)), (unsigned int)((((ptrdiff_t)&executor_globals.opline_before_exception))>>32)); } #line 1918 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| // opline = EG(exception_op); //| LOAD_IP_ADDR_ZTS executor_globals, exception_op dasm_put(Dst, 63); if (GCC_GLOBAL_REGS) { if (IS_SIGNED_32BIT(&executor_globals.exception_op)) { dasm_put(Dst, 501, ((ptrdiff_t)&executor_globals.exception_op)); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)&executor_globals.exception_op)), (unsigned int)((((ptrdiff_t)&executor_globals.exception_op))>>32)); } } else { if (IS_SIGNED_32BIT(&executor_globals.exception_op)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)&executor_globals.exception_op)); } else { dasm_put(Dst, 511, (unsigned int)(((ptrdiff_t)&executor_globals.exception_op)), (unsigned int)((((ptrdiff_t)&executor_globals.exception_op))>>32), Dt1(->opline)); } } #line 1921 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (GCC_GLOBAL_REGS) { //| mov aword EX->opline, IP dasm_put(Dst, 8, Dt1(->opline)); } #line 1924 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // HANDLE_EXCEPTION() //| jmp ->exception_handler dasm_put(Dst, 227); #line 1926 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_throw_cannot_pass_by_ref_stub(dasm_State **Dst) { //|->throw_cannot_pass_by_ref: //| mov r0, EX->opline //| mov ecx, dword OP:r0->result.var //| SET_Z_TYPE_INFO RX+r1, IS_UNDEF //| // last EX(call) frame may be delayed //| cmp RX, EX->call //| je >1 //| mov r1, EX->call //| mov EX:RX->prev_execute_data, r1 //| mov EX->call, RX //|1: //| mov RX, r0 //| mov FCARG1d, dword OP:r0->op2.num //| EXT_CALL zend_cannot_pass_by_reference, r0 dasm_put(Dst, 583, Dt1(->opline), Dt2(->result.var), offsetof(zval,u1.type_info), IS_UNDEF, Dt1(->call), Dt1(->call), Dt1(->prev_execute_data), Dt1(->call), Dt2(->op2.num)); if (MAY_USE_32BIT_ADDR(zend_cannot_pass_by_reference)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_cannot_pass_by_reference)); } else { if (IS_SIGNED_32BIT(zend_cannot_pass_by_reference)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_cannot_pass_by_reference)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_cannot_pass_by_reference)), (unsigned int)((((ptrdiff_t)zend_cannot_pass_by_reference))>>32)); } dasm_put(Dst, 59); } #line 1946 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp byte OP:RX->op1_type, IS_TMP_VAR //| jne >9 //| mov eax, dword OP:RX->op1.var //| add r0, FP //| ZVAL_PTR_DTOR ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0), MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF, 0, 0, NULL dasm_put(Dst, 628, Dt2(->op1_type), IS_TMP_VAR, Dt2(->op1.var)); if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))); if (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || RC_MAY_BE_1(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF)) { if (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF)) { if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) && has_concrete_type((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } #line 1951 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|9: //| jmp ->exception_handler dasm_put(Dst, 412); #line 1953 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_undefined_offset_ex_stub(dasm_State **Dst) { //|->undefined_offset_ex: //| SAVE_IP dasm_put(Dst, 646); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } #line 1961 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->undefined_offset dasm_put(Dst, 649); #line 1962 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_undefined_offset_stub(dasm_State **Dst) { //|->undefined_offset: dasm_put(Dst, 654); if (!GCC_GLOBAL_REGS) { #line 1970 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1a, FP dasm_put(Dst, 66); } #line 1972 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_JMP zend_jit_undefined_long_key, r0 if (MAY_USE_32BIT_ADDR(zend_jit_undefined_long_key)) { dasm_put(Dst, 150, (ptrdiff_t)(zend_jit_undefined_long_key)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_long_key)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_long_key)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_long_key)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_long_key))>>32)); } dasm_put(Dst, 154); } #line 1973 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_undefined_index_ex_stub(dasm_State **Dst) { //|->undefined_index_ex: //| SAVE_IP dasm_put(Dst, 657); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } #line 1981 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->undefined_index dasm_put(Dst, 660); #line 1982 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_undefined_index_stub(dasm_State **Dst) { //|->undefined_index: dasm_put(Dst, 665); if (!GCC_GLOBAL_REGS) { #line 1990 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1a, FP dasm_put(Dst, 66); } #line 1992 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_JMP zend_jit_undefined_string_key, r0 if (MAY_USE_32BIT_ADDR(zend_jit_undefined_string_key)) { dasm_put(Dst, 150, (ptrdiff_t)(zend_jit_undefined_string_key)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_string_key)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_string_key)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_string_key)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_string_key))>>32)); } dasm_put(Dst, 154); } #line 1993 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_cannot_add_element_ex_stub(dasm_State **Dst) { //|->cannot_add_element_ex: //| SAVE_IP dasm_put(Dst, 668); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } #line 2001 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->cannot_add_element dasm_put(Dst, 671); #line 2002 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_cannot_add_element_stub(dasm_State **Dst) { //|->cannot_add_element: //|.if X64WIN //| sub r4, 0x28 //|.elif X64 //| sub r4, 8 //|.else //| sub r4, 12 //|.endif //| mov r0, EX->opline //| cmp byte OP:r0->result_type, IS_UNUSED //| jz >1 //| mov eax, dword OP:r0->result.var //| SET_Z_TYPE_INFO FP + r0, IS_NULL //|1: //|.if X64WIN //| xor CARG1, CARG1 //| LOAD_ADDR CARG2, "Cannot add element to the array as the next element is already occupied" //| EXT_CALL zend_throw_error, r0 //| add r4, 0x28 //|.elif X64 //| xor CARG1, CARG1 //| LOAD_ADDR CARG2, "Cannot add element to the array as the next element is already occupied" dasm_put(Dst, 676, Dt1(->opline), Dt2(->result_type), IS_UNUSED, Dt2(->result.var), offsetof(zval,u1.type_info), IS_NULL); if (IS_SIGNED_32BIT("Cannot add element to the array as the next element is already occupied")) { dasm_put(Dst, 712, ((ptrdiff_t)"Cannot add element to the array as the next element is already occupied")); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)"Cannot add element to the array as the next element is already occupied")), (unsigned int)((((ptrdiff_t)"Cannot add element to the array as the next element is already occupied"))>>32)); } #line 2030 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_throw_error, r0 if (MAY_USE_32BIT_ADDR(zend_throw_error)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_throw_error)); } else { if (IS_SIGNED_32BIT(zend_throw_error)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_throw_error)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_throw_error)), (unsigned int)((((ptrdiff_t)zend_throw_error))>>32)); } dasm_put(Dst, 59); } #line 2031 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| add r4, 8 //|.else //| sub r4, 8 //| push "Cannot add element to the array as the next element is already occupied" //| push 0 //| EXT_CALL zend_throw_error, r0 //| add r4, 28 //|.endif //| ret dasm_put(Dst, 722); #line 2040 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_undefined_function_stub(dasm_State **Dst) { //|->undefined_function: //| mov r0, aword EX->opline //|.if X64 //| xor CARG1, CARG1 //| LOAD_ADDR CARG2, "Call to undefined function %s()" dasm_put(Dst, 728, Dt1(->opline)); if (IS_SIGNED_32BIT("Call to undefined function %s()")) { dasm_put(Dst, 712, ((ptrdiff_t)"Call to undefined function %s()")); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)"Call to undefined function %s()")), (unsigned int)((((ptrdiff_t)"Call to undefined function %s()"))>>32)); } #line 2051 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| movsxd CARG3, dword [r0 + offsetof(zend_op, op2.constant)] //| mov CARG3, aword [r0 + CARG3] //| add CARG3, offsetof(zend_string, val) //| EXT_CALL zend_throw_error, r0 dasm_put(Dst, 739, offsetof(zend_op, op2.constant), offsetof(zend_string, val)); if (MAY_USE_32BIT_ADDR(zend_throw_error)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_throw_error)); } else { if (IS_SIGNED_32BIT(zend_throw_error)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_throw_error)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_throw_error)), (unsigned int)((((ptrdiff_t)zend_throw_error))>>32)); } dasm_put(Dst, 59); } #line 2055 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| mov r0, aword [r0 + offsetof(zend_op, op2.zv)] //| mov r0, aword [r0] //| add r0, offsetof(zend_string, val) //| mov aword A3, r0 //| mov aword A2, "Call to undefined function %s()" //| mov aword A1, 0 //| EXT_CALL zend_throw_error, r0 //|.endif //| jmp ->exception_handler dasm_put(Dst, 227); #line 2065 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_negative_shift_stub(dasm_State **Dst) { //|->negative_shift: //| mov RX, EX->opline //|.if X64 //|.if WIN //| LOAD_ADDR CARG1, &zend_ce_arithmetic_error //| mov CARG1, aword [CARG1] //|.else //| LOAD_ADDR CARG1, zend_ce_arithmetic_error dasm_put(Dst, 752, Dt1(->opline)); if (IS_SIGNED_32BIT(zend_ce_arithmetic_error)) { dasm_put(Dst, 759, ((ptrdiff_t)zend_ce_arithmetic_error)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)zend_ce_arithmetic_error)), (unsigned int)((((ptrdiff_t)zend_ce_arithmetic_error))>>32)); } #line 2078 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.endif //| LOAD_ADDR CARG2, "Bit shift by negative number" if (IS_SIGNED_32BIT("Bit shift by negative number")) { dasm_put(Dst, 712, ((ptrdiff_t)"Bit shift by negative number")); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)"Bit shift by negative number")), (unsigned int)((((ptrdiff_t)"Bit shift by negative number"))>>32)); } #line 2080 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_throw_error, r0 if (MAY_USE_32BIT_ADDR(zend_throw_error)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_throw_error)); } else { if (IS_SIGNED_32BIT(zend_throw_error)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_throw_error)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_throw_error)), (unsigned int)((((ptrdiff_t)zend_throw_error))>>32)); } dasm_put(Dst, 59); } #line 2081 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 8 //| push "Bit shift by negative number" //|.if WIN //| LOAD_ADDR r0, &zend_ce_arithmetic_error //| push aword [r0] //|.else //| PUSH_ADDR zend_ce_arithmetic_error, r0 //|.endif //| EXT_CALL zend_throw_error, r0 //| add r4, 16 //|.endif //| jmp ->exception_handler_free_op1_op2 dasm_put(Dst, 769); #line 2094 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_mod_by_zero_stub(dasm_State **Dst) { //|->mod_by_zero: //| mov RX, EX->opline //|.if X64 //|.if WIN //| LOAD_ADDR CARG1, &zend_ce_division_by_zero_error //| mov CARG1, aword [CARG1] //|.else //| LOAD_ADDR CARG1, zend_ce_division_by_zero_error dasm_put(Dst, 774, Dt1(->opline)); if (IS_SIGNED_32BIT(zend_ce_division_by_zero_error)) { dasm_put(Dst, 759, ((ptrdiff_t)zend_ce_division_by_zero_error)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)zend_ce_division_by_zero_error)), (unsigned int)((((ptrdiff_t)zend_ce_division_by_zero_error))>>32)); } #line 2107 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.endif //| LOAD_ADDR CARG2, "Modulo by zero" if (IS_SIGNED_32BIT("Modulo by zero")) { dasm_put(Dst, 712, ((ptrdiff_t)"Modulo by zero")); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)"Modulo by zero")), (unsigned int)((((ptrdiff_t)"Modulo by zero"))>>32)); } #line 2109 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_throw_error, r0 if (MAY_USE_32BIT_ADDR(zend_throw_error)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_throw_error)); } else { if (IS_SIGNED_32BIT(zend_throw_error)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_throw_error)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_throw_error)), (unsigned int)((((ptrdiff_t)zend_throw_error))>>32)); } dasm_put(Dst, 59); } #line 2110 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 8 //| push "Modulo by zero" //|.if WIN //| LOAD_ADDR r0, &zend_ce_division_by_zero_error //| push aword [r0] //|.else //| PUSH_ADDR zend_ce_division_by_zero_error, r0 //|.endif //| EXT_CALL zend_throw_error, r0 //| add r4, 16 //|.endif //| jmp ->exception_handler_free_op1_op2 dasm_put(Dst, 769); #line 2123 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_invalid_this_stub(dasm_State **Dst) { //|->invalid_this: //| UNDEF_OPLINE_RESULT //|.if X64 //| xor CARG1, CARG1 //| LOAD_ADDR CARG2, "Using $this when not in object context" dasm_put(Dst, 781, Dt1(->opline), Dt2(->result.var), offsetof(zval,u1.type_info), IS_UNDEF); if (IS_SIGNED_32BIT("Using $this when not in object context")) { dasm_put(Dst, 712, ((ptrdiff_t)"Using $this when not in object context")); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)"Using $this when not in object context")), (unsigned int)((((ptrdiff_t)"Using $this when not in object context"))>>32)); } #line 2133 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_throw_error, r0 if (MAY_USE_32BIT_ADDR(zend_throw_error)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_throw_error)); } else { if (IS_SIGNED_32BIT(zend_throw_error)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_throw_error)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_throw_error)), (unsigned int)((((ptrdiff_t)zend_throw_error))>>32)); } dasm_put(Dst, 59); } #line 2134 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 8 //| push "Using $this when not in object context" //| push 0 //| EXT_CALL zend_throw_error, r0 //| add r4, 16 //|.endif //| jmp ->exception_handler dasm_put(Dst, 227); #line 2142 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_double_one_stub(dasm_State **Dst) { //|->one: //|.dword 0, 0x3ff00000 dasm_put(Dst, 802); #line 2149 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_hybrid_runtime_jit_stub(dasm_State **Dst) { if (zend_jit_vm_kind != ZEND_VM_KIND_HYBRID) { return 1; } //|->hybrid_runtime_jit: //| EXT_CALL zend_runtime_jit, r0 dasm_put(Dst, 814); if (MAY_USE_32BIT_ADDR(zend_runtime_jit)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_runtime_jit)); } else { if (IS_SIGNED_32BIT(zend_runtime_jit)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_runtime_jit)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_runtime_jit)), (unsigned int)((((ptrdiff_t)zend_runtime_jit))>>32)); } dasm_put(Dst, 59); } #line 2160 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 2161 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_hybrid_profile_jit_stub(dasm_State **Dst) { if (zend_jit_vm_kind != ZEND_VM_KIND_HYBRID) { return 1; } //|->hybrid_profile_jit: //| // ++zend_jit_profile_counter; //| .if X64 //| LOAD_ADDR r0, &zend_jit_profile_counter dasm_put(Dst, 817); if (IS_SIGNED_32BIT(&zend_jit_profile_counter)) { dasm_put(Dst, 49, ((ptrdiff_t)&zend_jit_profile_counter)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)&zend_jit_profile_counter)), (unsigned int)((((ptrdiff_t)&zend_jit_profile_counter))>>32)); } #line 2174 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| inc aword [r0] //| .else //| inc aword [&zend_jit_profile_counter] //| .endif //| // op_array = (zend_op_array*)EX(func); //| mov r0, EX->func //| // run_time_cache = EX(run_time_cache); //| mov r2, EX->run_time_cache //| // jit_extension = (const void*)ZEND_FUNC_INFO(op_array); //| mov r0, aword [r0 + offsetof(zend_op_array, reserved[zend_func_info_rid])] //| // ++ZEND_COUNTER_INFO(op_array) //| inc aword [r2 + zend_jit_profile_counter_rid * sizeof(void*)] //| // return ((zend_vm_opcode_handler_t)jit_extension->orig_handler)() //| jmp aword [r0 + offsetof(zend_jit_op_array_extension, orig_handler)] dasm_put(Dst, 820, Dt1(->func), Dt1(->run_time_cache), offsetof(zend_op_array, reserved[zend_func_info_rid]), zend_jit_profile_counter_rid * sizeof(void*), offsetof(zend_jit_op_array_extension, orig_handler)); #line 2188 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_hybrid_hot_code_stub(dasm_State **Dst) { if (zend_jit_vm_kind != ZEND_VM_KIND_HYBRID) { return 1; } //|->hybrid_hot_code: //| mov word [r2], ZEND_JIT_COUNTER_INIT //| mov FCARG1a, FP //| GET_IP FCARG2a dasm_put(Dst, 846, ZEND_JIT_COUNTER_INIT); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 857); } else { dasm_put(Dst, 862, Dt1(->opline)); } #line 2201 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_hot_func, r0 if (MAY_USE_32BIT_ADDR(zend_jit_hot_func)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_hot_func)); } else { if (IS_SIGNED_32BIT(zend_jit_hot_func)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_hot_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_hot_func)), (unsigned int)((((ptrdiff_t)zend_jit_hot_func))>>32)); } dasm_put(Dst, 59); } #line 2202 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 2203 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } /* * This code is based Mike Pall's "Hashed profile counters" idea, implemented * in LuaJIT. The full description may be found in "LuaJIT 2.0 intellectual * property disclosure and research opportunities" email * at http://lua-users.org/lists/lua-l/2009-11/msg00089.html * * In addition we use a variation of Knuth's multiplicative hash function * described at https://code.i-harness.com/en/q/a21ce * * uint64_t hash(uint64_t x) { * x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; * x = (x ^ (x >> 27)) * 0x94d049bb133111eb; * x = x ^ (x >> 31); * return x; * } * * uint_32_t hash(uint32_t x) { * x = ((x >> 16) ^ x) * 0x45d9f3b; * x = ((x >> 16) ^ x) * 0x45d9f3b; * x = (x >> 16) ^ x; * return x; * } * */ static int zend_jit_hybrid_hot_counter_stub(dasm_State **Dst, uint32_t cost) { //| ENDBR #if defined (__CET__) && (__CET__ & 1) != 0 dasm_put(Dst, 867); #endif #line 2233 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov r0, EX->func //| mov r1, aword [r0 + offsetof(zend_op_array, reserved[zend_func_info_rid])] //| mov r2, aword [r1 + offsetof(zend_jit_op_array_hot_extension, counter)] //| sub word [r2], cost //| jle ->hybrid_hot_code //| GET_IP r2 dasm_put(Dst, 874, Dt1(->func), offsetof(zend_op_array, reserved[zend_func_info_rid]), offsetof(zend_jit_op_array_hot_extension, counter), cost); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 895); } else { dasm_put(Dst, 900, Dt1(->opline)); } #line 2239 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| sub r2, aword [r0 + offsetof(zend_op_array, opcodes)] //| // divide by sizeof(zend_op) //| .if X64 dasm_put(Dst, 905, offsetof(zend_op_array, opcodes)); ZEND_ASSERT(sizeof(zend_op) == 32); #line 2243 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| sar r2, 2 //| .else #line 2246 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| imul r2, 0xb6db6db7 //| .endif //| .if X64 //| jmp aword [r1+r2+offsetof(zend_jit_op_array_hot_extension, orig_handlers)] //| .else //| jmp aword [r1+r2+offsetof(zend_jit_op_array_hot_extension, orig_handlers)] //| .endif dasm_put(Dst, 910, offsetof(zend_jit_op_array_hot_extension, orig_handlers)); #line 2253 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_hybrid_func_hot_counter_stub(dasm_State **Dst) { if (zend_jit_vm_kind != ZEND_VM_KIND_HYBRID || !JIT_G(hot_func)) { return 1; } //|->hybrid_func_hot_counter: dasm_put(Dst, 922); #line 2263 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return zend_jit_hybrid_hot_counter_stub(Dst, ((ZEND_JIT_COUNTER_INIT + JIT_G(hot_func) - 1) / JIT_G(hot_func))); } static int zend_jit_hybrid_loop_hot_counter_stub(dasm_State **Dst) { if (zend_jit_vm_kind != ZEND_VM_KIND_HYBRID || !JIT_G(hot_loop)) { return 1; } //|->hybrid_loop_hot_counter: dasm_put(Dst, 925); #line 2275 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return zend_jit_hybrid_hot_counter_stub(Dst, ((ZEND_JIT_COUNTER_INIT + JIT_G(hot_loop) - 1) / JIT_G(hot_loop))); } static int zend_jit_hybrid_hot_trace_stub(dasm_State **Dst) { if (zend_jit_vm_kind != ZEND_VM_KIND_HYBRID) { return 1; } //|->hybrid_hot_trace: //| mov word [r2], ZEND_JIT_COUNTER_INIT //| mov FCARG1a, FP //| GET_IP FCARG2a dasm_put(Dst, 928, ZEND_JIT_COUNTER_INIT); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 857); } else { dasm_put(Dst, 862, Dt1(->opline)); } #line 2290 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_trace_hot_root, r0 if (MAY_USE_32BIT_ADDR(zend_jit_trace_hot_root)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_trace_hot_root)); } else { if (IS_SIGNED_32BIT(zend_jit_trace_hot_root)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_trace_hot_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_trace_hot_root)), (unsigned int)((((ptrdiff_t)zend_jit_trace_hot_root))>>32)); } dasm_put(Dst, 59); } #line 2291 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test eax, eax // TODO : remove this check at least for HYBRID VM ??? //| jl >1 //| MEM_LOAD_ZTS FP, aword, executor_globals, current_execute_data, r0 dasm_put(Dst, 939); if (IS_SIGNED_32BIT(&executor_globals.current_execute_data)) { dasm_put(Dst, 87, &executor_globals.current_execute_data); } else { dasm_put(Dst, 93, (unsigned int)(((ptrdiff_t)&executor_globals.current_execute_data)), (unsigned int)((((ptrdiff_t)&executor_globals.current_execute_data))>>32)); } #line 2294 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| LOAD_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 0, Dt1(->opline)); } #line 2295 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 2296 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| EXT_JMP zend_jit_halt_op->handler, r0 dasm_put(Dst, 63); if (MAY_USE_32BIT_ADDR(zend_jit_halt_op->handler)) { dasm_put(Dst, 150, (ptrdiff_t)(zend_jit_halt_op->handler)); } else { if (IS_SIGNED_32BIT(zend_jit_halt_op->handler)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_halt_op->handler)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_halt_op->handler)), (unsigned int)((((ptrdiff_t)zend_jit_halt_op->handler))>>32)); } dasm_put(Dst, 154); } #line 2298 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_hybrid_trace_counter_stub(dasm_State **Dst, uint32_t cost) { //| ENDBR #if defined (__CET__) && (__CET__ & 1) != 0 dasm_put(Dst, 867); #endif #line 2304 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov r0, EX->func //| mov r1, aword [r0 + offsetof(zend_op_array, reserved[zend_func_info_rid])] //| mov r1, aword [r1 + offsetof(zend_jit_op_array_trace_extension, offset)] //| mov r2, aword [IP + r1 + offsetof(zend_op_trace_info, counter)] //| sub word [r2], cost //| jle ->hybrid_hot_trace //| jmp aword [IP + r1] dasm_put(Dst, 946, Dt1(->func), offsetof(zend_op_array, reserved[zend_func_info_rid]), offsetof(zend_jit_op_array_trace_extension, offset), offsetof(zend_op_trace_info, counter), cost); #line 2311 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_hybrid_func_trace_counter_stub(dasm_State **Dst) { if (zend_jit_vm_kind != ZEND_VM_KIND_HYBRID || !JIT_G(hot_func)) { return 1; } //|->hybrid_func_trace_counter: dasm_put(Dst, 978); #line 2321 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return zend_jit_hybrid_trace_counter_stub(Dst, ((ZEND_JIT_COUNTER_INIT + JIT_G(hot_func) - 1) / JIT_G(hot_func))); } static int zend_jit_hybrid_ret_trace_counter_stub(dasm_State **Dst) { if (zend_jit_vm_kind != ZEND_VM_KIND_HYBRID || !JIT_G(hot_return)) { return 1; } //|->hybrid_ret_trace_counter: dasm_put(Dst, 981); #line 2333 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return zend_jit_hybrid_trace_counter_stub(Dst, ((ZEND_JIT_COUNTER_INIT + JIT_G(hot_return) - 1) / JIT_G(hot_return))); } static int zend_jit_hybrid_loop_trace_counter_stub(dasm_State **Dst) { if (zend_jit_vm_kind != ZEND_VM_KIND_HYBRID || !JIT_G(hot_loop)) { return 1; } //|->hybrid_loop_trace_counter: dasm_put(Dst, 984); #line 2345 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return zend_jit_hybrid_trace_counter_stub(Dst, ((ZEND_JIT_COUNTER_INIT + JIT_G(hot_loop) - 1) / JIT_G(hot_loop))); } static int zend_jit_trace_halt_stub(dasm_State **Dst) { //|->trace_halt: dasm_put(Dst, 987); #line 2353 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { //| ADD_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 101); #endif #line 2355 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_JMP zend_jit_halt_op->handler, r0 if (MAY_USE_32BIT_ADDR(zend_jit_halt_op->handler)) { dasm_put(Dst, 150, (ptrdiff_t)(zend_jit_halt_op->handler)); } else { if (IS_SIGNED_32BIT(zend_jit_halt_op->handler)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_halt_op->handler)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_halt_op->handler)), (unsigned int)((((ptrdiff_t)zend_jit_halt_op->handler))>>32)); } dasm_put(Dst, 154); } #line 2356 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (GCC_GLOBAL_REGS) { //| add r4, SPAD // stack alignment //| xor IP, IP // PC must be zero //| ret dasm_put(Dst, 990); #line 2360 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov FP, aword T2 // restore FP //| mov RX, aword T3 // restore IP //| add r4, NR_SPAD // stack alignment //| mov r0, -1 // ZEND_VM_RETURN //| ret dasm_put(Dst, 1000); #line 2366 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_trace_exit_stub(dasm_State **Dst) { //|->trace_exit: //| //| // Save CPU registers //|.if X64 //| sub r4, 16*8+16*8-8 /* CPU regs + SSE regs */ //| mov aword [r4+15*8], r15 //| mov aword [r4+11*8], r11 //| mov aword [r4+10*8], r10 //| mov aword [r4+9*8], r9 //| mov aword [r4+8*8], r8 //| mov aword [r4+7*8], rdi //| mov aword [r4+6*8], rsi //| mov aword [r4+2*8], rdx //| mov aword [r4+1*8], rcx //| mov aword [r4+0*8], rax //| mov FCARG1a, aword [r4+16*8+16*8-8] // exit_num = POP //| mov FCARG2a, r4 //| movsd qword [r4+16*8+15*8], xmm15 //| movsd qword [r4+16*8+14*8], xmm14 //| movsd qword [r4+16*8+13*8], xmm13 //| movsd qword [r4+16*8+12*8], xmm12 //| movsd qword [r4+16*8+11*8], xmm11 //| movsd qword [r4+16*8+10*8], xmm10 //| movsd qword [r4+16*8+9*8], xmm9 dasm_put(Dst, 1027, 16*8+16*8-8 /* CPU regs + SSE regs */, 15*8, 11*8, 10*8, 9*8, 8*8, 7*8, 6*8, 2*8, 1*8, 0*8, 16*8+16*8-8, 16*8+15*8, 16*8+14*8, 16*8+13*8, 16*8+12*8, 16*8+11*8, 16*8+10*8); #line 2396 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| movsd qword [r4+16*8+8*8], xmm8 //| movsd qword [r4+16*8+7*8], xmm7 //| movsd qword [r4+16*8+6*8], xmm6 //| movsd qword [r4+16*8+5*8], xmm5 //| movsd qword [r4+16*8+4*8], xmm4 //| movsd qword [r4+16*8+3*8], xmm3 //| movsd qword [r4+16*8+2*8], xmm2 //| movsd qword [r4+16*8+1*8], xmm1 //| movsd qword [r4+16*8+0*8], xmm0 //|.if X64WIN //| sub r4, 32 /* shadow space */ //|.endif //|.else //| sub r4, 8*4+8*8-4 /* CPU regs + SSE regs */ //| mov aword [r4+7*4], edi //| mov aword [r4+2*4], edx //| mov aword [r4+1*4], ecx //| mov aword [r4+0*4], eax //| mov FCARG1a, aword [r4+8*4+8*8-4] // exit_num = POP //| mov FCARG2a, r4 //| movsd qword [r4+8*4+7*8], xmm7 //| movsd qword [r4+8*4+6*8], xmm6 //| movsd qword [r4+8*4+5*8], xmm5 //| movsd qword [r4+8*4+4*8], xmm4 //| movsd qword [r4+8*4+3*8], xmm3 //| movsd qword [r4+8*4+2*8], xmm2 //| movsd qword [r4+8*4+1*8], xmm1 //| movsd qword [r4+8*4+0*8], xmm0 //|.endif //| //| // EX(opline) = opline //| SAVE_IP dasm_put(Dst, 1158, 16*8+9*8, 16*8+8*8, 16*8+7*8, 16*8+6*8, 16*8+5*8, 16*8+4*8, 16*8+3*8, 16*8+2*8, 16*8+1*8, 16*8+0*8); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } #line 2428 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // zend_jit_trace_exit(trace_num, exit_num) //| EXT_CALL zend_jit_trace_exit, r0 if (MAY_USE_32BIT_ADDR(zend_jit_trace_exit)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_trace_exit)); } else { if (IS_SIGNED_32BIT(zend_jit_trace_exit)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_trace_exit)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_trace_exit)), (unsigned int)((((ptrdiff_t)zend_jit_trace_exit))>>32)); } dasm_put(Dst, 59); } #line 2430 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64WIN //| add r4, 16*8+16*8+32 /* CPU regs + SSE regs + shadow space */ //|.elif X64 //| add r4, 16*8+16*8 /* CPU regs + SSE regs */ //|.else //| add r4, 8*4+8*8 /* CPU regs + SSE regs */ //|.endif dasm_put(Dst, 1241, 16*8+16*8 /* CPU regs + SSE regs */); #line 2437 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test eax, eax //| jne >1 dasm_put(Dst, 1246); #line 2440 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // execute_data = EG(current_execute_data) //| MEM_LOAD_ZTS FP, aword, executor_globals, current_execute_data, r0 if (IS_SIGNED_32BIT(&executor_globals.current_execute_data)) { dasm_put(Dst, 87, &executor_globals.current_execute_data); } else { dasm_put(Dst, 93, (unsigned int)(((ptrdiff_t)&executor_globals.current_execute_data)), (unsigned int)((((ptrdiff_t)&executor_globals.current_execute_data))>>32)); } #line 2443 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // opline = EX(opline) //| LOAD_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 0, Dt1(->opline)); } #line 2445 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { //| ADD_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 101); #endif #line 2448 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 2449 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (GCC_GLOBAL_REGS) { //| add r4, SPAD // stack alignment //| JMP_IP dasm_put(Dst, 119); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 2452 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov FP, aword T2 // restore FP //| mov RX, aword T3 // restore IP //| add r4, NR_SPAD // stack alignment //| mov r0, 1 // ZEND_VM_ENTER //| ret dasm_put(Dst, 124); #line 2458 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|1: //| jl ->trace_halt dasm_put(Dst, 1253); #line 2462 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // execute_data = EG(current_execute_data) //| MEM_LOAD_ZTS FP, aword, executor_globals, current_execute_data, r0 if (IS_SIGNED_32BIT(&executor_globals.current_execute_data)) { dasm_put(Dst, 87, &executor_globals.current_execute_data); } else { dasm_put(Dst, 93, (unsigned int)(((ptrdiff_t)&executor_globals.current_execute_data)), (unsigned int)((((ptrdiff_t)&executor_globals.current_execute_data))>>32)); } #line 2465 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // opline = EX(opline) //| LOAD_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 0, Dt1(->opline)); } #line 2467 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // check for interrupt (try to avoid this ???) //| MEM_CMP_ZTS byte, executor_globals, vm_interrupt, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.vm_interrupt)) { dasm_put(Dst, 27, &executor_globals.vm_interrupt); } else { dasm_put(Dst, 33, (unsigned int)(((ptrdiff_t)&executor_globals.vm_interrupt)), (unsigned int)((((ptrdiff_t)&executor_globals.vm_interrupt))>>32)); } #line 2470 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne ->interrupt_handler dasm_put(Dst, 1260); #line 2471 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { //| ADD_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 101); #endif #line 2474 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov r0, EX->func //| mov r0, aword [r0 + offsetof(zend_op_array, reserved[zend_func_info_rid])] //| mov r0, aword [r0 + offsetof(zend_jit_op_array_trace_extension, offset)] //| jmp aword [IP + r0] dasm_put(Dst, 1265, Dt1(->func), offsetof(zend_op_array, reserved[zend_func_info_rid]), offsetof(zend_jit_op_array_trace_extension, offset)); #line 2478 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (GCC_GLOBAL_REGS) { //| add r4, SPAD // stack alignment //| mov r0, EX->func //| mov r0, aword [r0 + offsetof(zend_op_array, reserved[zend_func_info_rid])] //| mov r0, aword [r0 + offsetof(zend_jit_op_array_trace_extension, offset)] //| jmp aword [IP + r0] dasm_put(Dst, 1283, Dt1(->func), offsetof(zend_op_array, reserved[zend_func_info_rid]), offsetof(zend_jit_op_array_trace_extension, offset)); #line 2484 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov IP, aword EX->opline //| mov FCARG1a, FP //| mov r0, EX->func //| mov r0, aword [r0 + offsetof(zend_op_array, reserved[zend_func_info_rid])] //| mov r0, aword [r0 + offsetof(zend_jit_op_array_trace_extension, offset)] //| call aword [IP + r0] //| test eax, eax //| jl ->trace_halt //| mov FP, aword T2 // restore FP //| mov RX, aword T3 // restore IP //| add r4, NR_SPAD // stack alignment //| mov r0, 1 // ZEND_VM_ENTER //| ret dasm_put(Dst, 1305, Dt1(->opline), Dt1(->func), offsetof(zend_op_array, reserved[zend_func_info_rid]), offsetof(zend_jit_op_array_trace_extension, offset)); #line 2498 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_trace_escape_stub(dasm_State **Dst) { //|->trace_escape: //| dasm_put(Dst, 1359); #line 2507 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { //| ADD_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 101); #endif #line 2509 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 2510 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (GCC_GLOBAL_REGS) { //| add r4, SPAD // stack alignment //| JMP_IP dasm_put(Dst, 119); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 2513 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov FP, aword T2 // restore FP //| mov RX, aword T3 // restore IP //| add r4, NR_SPAD // stack alignment //| mov r0, 1 // ZEND_VM_ENTER //| ret dasm_put(Dst, 124); #line 2519 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } /* Keep 32 exit points in a single code block */ #define ZEND_JIT_EXIT_POINTS_SPACING 4 // push byte + short jmp = bytes #define ZEND_JIT_EXIT_POINTS_PER_GROUP 32 // number of continuous exit points static int zend_jit_trace_exit_group_stub(dasm_State **Dst, uint32_t n) { uint32_t i; for (i = 0; i < ZEND_JIT_EXIT_POINTS_PER_GROUP - 1; i++) { //| push byte i //| .byte 0xeb, (4*(ZEND_JIT_EXIT_POINTS_PER_GROUP-i)-6) // jmp >1 dasm_put(Dst, 1362, i, (4*(ZEND_JIT_EXIT_POINTS_PER_GROUP-i)-6)); #line 2535 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| push byte i //|// 1: //| add aword [r4], n //| jmp ->trace_exit dasm_put(Dst, 1368, i, n); #line 2540 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } #ifdef CONTEXT_THREADED_JIT static int zend_jit_context_threaded_call_stub(dasm_State **Dst) { //|->context_threaded_call: //| pop r0 dasm_put(Dst, 1381); #line 2549 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { //| ADD_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 101); #endif #line 2551 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp aword [IP] dasm_put(Dst, 106); #line 2552 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (GCC_GLOBAL_REGS) { //| add r4, SPAD // stack alignment //| jmp aword [IP] dasm_put(Dst, 1385); #line 2555 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); // TODO: context threading can't work without GLOBAL REGS because we have to change // the value of execute_data in execute_ex() //| mov FCARG1a, FP //| mov r0, aword [FP] //| mov FP, aword T2 // restore FP //| mov RX, aword T3 // restore IP //| add r4, NR_SPAD // stack alignment //| jmp aword [r0] dasm_put(Dst, 1394); #line 2565 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } #endif static int zend_jit_assign_const_stub(dasm_State **Dst) { zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); zend_jit_addr val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG2, 0); uint32_t val_info = MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN; //|->assign_const: //|.if X64WIN //| sub r4, 0x28 //|.elif X64 //| sub r4, 8 //|.else //| sub r4, 12 //|.endif dasm_put(Dst, 1419); #line 2584 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_assign_to_variable( Dst, NULL, var_addr, var_addr, -1, -1, IS_CONST, val_addr, val_info, 0, 0)) { return 0; } //|.if X64WIN //| add r4, 0x28 //|.elif X64 //| add r4, 8 //|.else //| add r4, 12 //|.endif //| ret dasm_put(Dst, 722); #line 2599 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_assign_tmp_stub(dasm_State **Dst) { zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); zend_jit_addr val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG2, 0); uint32_t val_info = MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN; //|->assign_tmp: //|.if X64WIN //| sub r4, 0x28 //|.elif X64 //| sub r4, 8 //|.else //| sub r4, 12 //|.endif dasm_put(Dst, 1427); #line 2616 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_assign_to_variable( Dst, NULL, var_addr, var_addr, -1, -1, IS_TMP_VAR, val_addr, val_info, 0, 0)) { return 0; } //|.if X64WIN //| add r4, 0x28 //|.elif X64 //| add r4, 8 //|.else //| add r4, 12 //|.endif //| ret dasm_put(Dst, 722); #line 2631 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_assign_var_stub(dasm_State **Dst) { zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); zend_jit_addr val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG2, 0); uint32_t val_info = MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF; //|->assign_var: //|.if X64WIN //| sub r4, 0x28 //|.elif X64 //| sub r4, 8 //|.else //| sub r4, 12 //|.endif dasm_put(Dst, 1435); #line 2648 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_assign_to_variable( Dst, NULL, var_addr, var_addr, -1, -1, IS_VAR, val_addr, val_info, 0, 0)) { return 0; } //|.if X64WIN //| add r4, 0x28 //|.elif X64 //| add r4, 8 //|.else //| add r4, 12 //|.endif //| ret dasm_put(Dst, 722); #line 2663 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_assign_cv_noref_stub(dasm_State **Dst) { zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); zend_jit_addr val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG2, 0); uint32_t val_info = MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN/*|MAY_BE_UNDEF*/; //|->assign_cv_noref: //|.if X64WIN //| sub r4, 0x28 //|.elif X64 //| sub r4, 8 //|.else //| sub r4, 12 //|.endif dasm_put(Dst, 1443); #line 2680 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_assign_to_variable( Dst, NULL, var_addr, var_addr, -1, -1, IS_CV, val_addr, val_info, 0, 0)) { return 0; } //|.if X64WIN //| add r4, 0x28 //|.elif X64 //| add r4, 8 //|.else //| add r4, 12 //|.endif //| ret dasm_put(Dst, 722); #line 2695 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_assign_cv_stub(dasm_State **Dst) { zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); zend_jit_addr val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG2, 0); uint32_t val_info = MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF/*|MAY_BE_UNDEF*/; //|->assign_cv: //|.if X64WIN //| sub r4, 0x28 //|.elif X64 //| sub r4, 8 //|.else //| sub r4, 12 //|.endif dasm_put(Dst, 1451); #line 2712 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_assign_to_variable( Dst, NULL, var_addr, var_addr, -1, -1, IS_CV, val_addr, val_info, 0, 0)) { return 0; } //|.if X64WIN //| add r4, 0x28 //|.elif X64 //| add r4, 8 //|.else //| add r4, 12 //|.endif //| ret dasm_put(Dst, 722); #line 2727 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static const zend_jit_stub zend_jit_stubs[] = { JIT_STUB(interrupt_handler, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(exception_handler, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(exception_handler_undef, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(exception_handler_free_op1_op2, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(exception_handler_free_op2, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(leave_function, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(leave_throw, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(icall_throw, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(throw_cannot_pass_by_ref, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(undefined_offset, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(undefined_index, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(cannot_add_element, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(undefined_offset_ex, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(undefined_index_ex, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(cannot_add_element_ex, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(undefined_function, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(negative_shift, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(mod_by_zero, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(invalid_this, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(trace_halt, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(trace_exit, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(trace_escape, SP_ADJ_JIT, SP_ADJ_VM), JIT_STUB(hybrid_runtime_jit, SP_ADJ_VM, SP_ADJ_NONE), JIT_STUB(hybrid_profile_jit, SP_ADJ_VM, SP_ADJ_NONE), JIT_STUB(hybrid_hot_code, SP_ADJ_VM, SP_ADJ_NONE), JIT_STUB(hybrid_func_hot_counter, SP_ADJ_VM, SP_ADJ_NONE), JIT_STUB(hybrid_loop_hot_counter, SP_ADJ_VM, SP_ADJ_NONE), JIT_STUB(hybrid_hot_trace, SP_ADJ_VM, SP_ADJ_NONE), JIT_STUB(hybrid_func_trace_counter, SP_ADJ_VM, SP_ADJ_NONE), JIT_STUB(hybrid_ret_trace_counter, SP_ADJ_VM, SP_ADJ_NONE), JIT_STUB(hybrid_loop_trace_counter, SP_ADJ_VM, SP_ADJ_NONE), JIT_STUB(assign_const, SP_ADJ_RET, SP_ADJ_ASSIGN), JIT_STUB(assign_tmp, SP_ADJ_RET, SP_ADJ_ASSIGN), JIT_STUB(assign_var, SP_ADJ_RET, SP_ADJ_ASSIGN), JIT_STUB(assign_cv_noref, SP_ADJ_RET, SP_ADJ_ASSIGN), JIT_STUB(assign_cv, SP_ADJ_RET, SP_ADJ_ASSIGN), JIT_STUB(double_one, SP_ADJ_NONE, SP_ADJ_NONE), #ifdef CONTEXT_THREADED_JIT JIT_STUB(context_threaded_call, SP_ADJ_RET, SP_ADJ_NONE), #endif }; #if ZTS && defined(ZEND_WIN32) extern uint32_t _tls_index; extern char *_tls_start; extern char *_tls_end; #endif #ifdef HAVE_GDB typedef struct _Unwind_Context _Unwind_Context; typedef int (*_Unwind_Trace_Fn)(_Unwind_Context *, void *); extern int _Unwind_Backtrace(_Unwind_Trace_Fn, void *); extern uintptr_t _Unwind_GetCFA(_Unwind_Context *); typedef struct _zend_jit_unwind_arg { int cnt; uintptr_t cfa[3]; } zend_jit_unwind_arg; static int zend_jit_unwind_cb(_Unwind_Context *ctx, void *a) { zend_jit_unwind_arg *arg = (zend_jit_unwind_arg*)a; arg->cfa[arg->cnt] = _Unwind_GetCFA(ctx); arg->cnt++; if (arg->cnt == 3) { return 5; // _URC_END_OF_STACK } return 0; // _URC_NO_REASON; } static void ZEND_FASTCALL zend_jit_touch_vm_stack_data(void *vm_stack_data) { zend_jit_unwind_arg arg; memset(&arg, 0, sizeof(arg)); _Unwind_Backtrace(zend_jit_unwind_cb, &arg); if (arg.cnt == 3) { sp_adj[SP_ADJ_VM] = arg.cfa[2] - arg.cfa[1]; } } extern void (ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data); static zend_never_inline void zend_jit_set_sp_adj_vm(void) { void (ZEND_FASTCALL *orig_zend_touch_vm_stack_data)(void *); orig_zend_touch_vm_stack_data = zend_touch_vm_stack_data; zend_touch_vm_stack_data = zend_jit_touch_vm_stack_data; execute_ex(NULL); // set sp_adj[SP_ADJ_VM] zend_touch_vm_stack_data = orig_zend_touch_vm_stack_data; } #endif static int zend_jit_setup(void) { if (!zend_cpu_supports_sse2()) { zend_error(E_CORE_ERROR, "CPU doesn't support SSE2"); return FAILURE; } allowed_opt_flags = 0; if (zend_cpu_supports_avx()) { allowed_opt_flags |= ZEND_JIT_CPU_AVX; } #if ZTS # ifdef _WIN64 tsrm_tls_index = _tls_index * sizeof(void*); /* To find offset of "_tsrm_ls_cache" in TLS segment we perform a linear scan of local TLS memory */ /* Probably, it might be better solution */ do { void ***tls_mem = ((void****)__readgsqword(0x58))[_tls_index]; void *val = _tsrm_ls_cache; size_t offset = 0; size_t size = (char*)&_tls_end - (char*)&_tls_start; while (offset < size) { if (*tls_mem == val) { tsrm_tls_offset = offset; break; } tls_mem++; offset += sizeof(void*); } if (offset >= size) { // TODO: error message ??? return FAILURE; } } while(0); # elif ZEND_WIN32 tsrm_tls_index = _tls_index * sizeof(void*); /* To find offset of "_tsrm_ls_cache" in TLS segment we perform a linear scan of local TLS memory */ /* Probably, it might be better solution */ do { void ***tls_mem = ((void****)__readfsdword(0x2c))[_tls_index]; void *val = _tsrm_ls_cache; size_t offset = 0; size_t size = (char*)&_tls_end - (char*)&_tls_start; while (offset < size) { if (*tls_mem == val) { tsrm_tls_offset = offset; break; } tls_mem++; offset += sizeof(void*); } if (offset >= size) { // TODO: error message ??? return FAILURE; } } while(0); # elif defined(__APPLE__) && defined(__x86_64__) tsrm_ls_cache_tcb_offset = tsrm_get_ls_cache_tcb_offset(); if (tsrm_ls_cache_tcb_offset == 0) { size_t *ti; __asm__( "leaq __tsrm_ls_cache(%%rip),%0" : "=r" (ti)); tsrm_tls_offset = ti[2]; tsrm_tls_index = ti[1] * 8; } # elif defined(__GNUC__) && defined(__x86_64__) tsrm_ls_cache_tcb_offset = tsrm_get_ls_cache_tcb_offset(); if (tsrm_ls_cache_tcb_offset == 0) { #if defined(__has_attribute) && __has_attribute(tls_model) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__MUSL__) size_t ret; asm ("movq _tsrm_ls_cache@gottpoff(%%rip),%0" : "=r" (ret)); tsrm_ls_cache_tcb_offset = ret; #else size_t *ti; __asm__( "leaq _tsrm_ls_cache@tlsgd(%%rip), %0\n" : "=a" (ti)); tsrm_tls_offset = ti[1]; tsrm_tls_index = ti[0] * 16; #endif } # elif defined(__GNUC__) && defined(__i386__) tsrm_ls_cache_tcb_offset = tsrm_get_ls_cache_tcb_offset(); if (tsrm_ls_cache_tcb_offset == 0) { #if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__MUSL__) size_t ret; asm ("leal _tsrm_ls_cache@ntpoff,%0\n" : "=a" (ret)); tsrm_ls_cache_tcb_offset = ret; #else size_t *ti, _ebx, _ecx, _edx; __asm__( "call 1f\n" ".subsection 1\n" "1:\tmovl (%%esp), %%ebx\n\t" "ret\n" ".previous\n\t" "addl $_GLOBAL_OFFSET_TABLE_, %%ebx\n\t" "leal _tsrm_ls_cache@tlsldm(%%ebx), %0\n\t" "call ___tls_get_addr@plt\n\t" "leal _tsrm_ls_cache@tlsldm(%%ebx), %0\n" : "=a" (ti), "=&b" (_ebx), "=&c" (_ecx), "=&d" (_edx)); tsrm_tls_offset = ti[1]; tsrm_tls_index = ti[0] * 8; #endif } # endif #endif memset(sp_adj, 0, sizeof(sp_adj)); #ifdef HAVE_GDB sp_adj[SP_ADJ_RET] = sizeof(void*); //|.if X64WIN #line 2949 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.elif X64 sp_adj[SP_ADJ_ASSIGN] = sp_adj[SP_ADJ_RET] + 8; // sub @q4, 8 //|.else #line 2953 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.endif if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { zend_jit_set_sp_adj_vm(); // set sp_adj[SP_ADJ_VM] #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE sp_adj[SP_ADJ_JIT] = sp_adj[SP_ADJ_VM] + 16; // sub @q4, 16 #else sp_adj[SP_ADJ_JIT] = sp_adj[SP_ADJ_VM]; #endif } else if (GCC_GLOBAL_REGS) { sp_adj[SP_ADJ_JIT] = sp_adj[SP_ADJ_RET] + 0x18; // sub @q4, 0x18 } else { sp_adj[SP_ADJ_JIT] = sp_adj[SP_ADJ_RET] + 0x28; // sub @q4, 0x28 } #endif return SUCCESS; } static ZEND_ATTRIBUTE_UNUSED int zend_jit_trap(dasm_State **Dst) { //| int3 dasm_put(Dst, 1459); #line 2974 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_align_func(dasm_State **Dst) { reuse_ip = 0; delayed_call_chain = 0; last_valid_opline = NULL; use_last_vald_opline = 0; track_last_valid_opline = 0; jit_return_label = -1; //|.align 16 dasm_put(Dst, 1461); #line 2986 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_prologue(dasm_State **Dst) { //| ENDBR #if defined (__CET__) && (__CET__ & 1) != 0 dasm_put(Dst, 867); #endif #line 2992 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { //| SUB_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 1464); #endif #line 2994 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (GCC_GLOBAL_REGS) { //| sub r4, SPAD // stack alignment dasm_put(Dst, 1470); #line 2996 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| sub r4, NR_SPAD // stack alignment //| mov aword T2, FP // save FP //| mov aword T3, RX // save IP //| mov FP, FCARG1a dasm_put(Dst, 1476); #line 3001 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_label(dasm_State **Dst, unsigned int label) { //|=>label: dasm_put(Dst, 319, label); #line 3008 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_save_call_chain(dasm_State **Dst, uint32_t call_level) { //| // call->prev_execute_data = EX(call); if (call_level == 1) { //| mov aword EX:RX->prev_execute_data, 0 dasm_put(Dst, 1496, Dt1(->prev_execute_data)); #line 3016 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov r0, EX->call //| mov EX:RX->prev_execute_data, r0 dasm_put(Dst, 1505, Dt1(->call), Dt1(->prev_execute_data)); #line 3019 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // EX(call) = call; //| mov EX->call, RX dasm_put(Dst, 8, Dt1(->call)); #line 3022 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" delayed_call_chain = 0; return 1; } static int zend_jit_set_ip(dasm_State **Dst, const zend_op *opline) { if (last_valid_opline == opline) { zend_jit_use_last_valid_opline(); } else if (GCC_GLOBAL_REGS && last_valid_opline) { zend_jit_use_last_valid_opline(); //| ADD_IP (opline - last_valid_opline) * sizeof(zend_op); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 1514, (opline - last_valid_opline) * sizeof(zend_op)); } else { dasm_put(Dst, 1519, Dt1(->opline), (opline - last_valid_opline) * sizeof(zend_op)); } #line 3035 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LOAD_IP_ADDR opline if (GCC_GLOBAL_REGS) { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 501, ((ptrdiff_t)opline)); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 511, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } } #line 3037 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } zend_jit_set_last_valid_opline(opline); return 1; } static int zend_jit_set_ip_ex(dasm_State **Dst, const zend_op *opline, bool set_ip_reg) { if (last_valid_opline == opline) { zend_jit_use_last_valid_opline(); } else if (GCC_GLOBAL_REGS && last_valid_opline) { zend_jit_use_last_valid_opline(); //| ADD_IP (opline - last_valid_opline) * sizeof(zend_op); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 1514, (opline - last_valid_opline) * sizeof(zend_op)); } else { dasm_put(Dst, 1519, Dt1(->opline), (opline - last_valid_opline) * sizeof(zend_op)); } #line 3050 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (!GCC_GLOBAL_REGS && set_ip_reg) { //| LOAD_ADDR RX, opline if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 501, ((ptrdiff_t)opline)); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32)); } #line 3052 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov aword EX->opline, RX dasm_put(Dst, 8, Dt1(->opline)); #line 3053 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LOAD_IP_ADDR opline if (GCC_GLOBAL_REGS) { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 501, ((ptrdiff_t)opline)); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 511, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } } #line 3055 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } zend_jit_set_last_valid_opline(opline); return 1; } static int zend_jit_set_valid_ip(dasm_State **Dst, const zend_op *opline) { if (delayed_call_chain) { if (!zend_jit_save_call_chain(Dst, delayed_call_level)) { return 0; } } if (!zend_jit_set_ip(Dst, opline)) { return 0; } reuse_ip = 0; return 1; } static int zend_jit_check_timeout(dasm_State **Dst, const zend_op *opline, const void *exit_addr) { #if 0 if (!zend_jit_set_valid_ip(Dst, opline)) { return 0; } //| MEM_CMP_ZTS byte, executor_globals, vm_interrupt, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.vm_interrupt)) { dasm_put(Dst, 27, &executor_globals.vm_interrupt); } else { dasm_put(Dst, 33, (unsigned int)(((ptrdiff_t)&executor_globals.vm_interrupt)), (unsigned int)((((ptrdiff_t)&executor_globals.vm_interrupt))>>32)); } #line 3082 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne ->interrupt_handler dasm_put(Dst, 1260); #line 3083 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #else //| MEM_CMP_ZTS byte, executor_globals, vm_interrupt, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.vm_interrupt)) { dasm_put(Dst, 27, &executor_globals.vm_interrupt); } else { dasm_put(Dst, 33, (unsigned int)(((ptrdiff_t)&executor_globals.vm_interrupt)), (unsigned int)((((ptrdiff_t)&executor_globals.vm_interrupt))>>32)); } #line 3085 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 3087 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (last_valid_opline == opline) { zend_jit_use_last_valid_opline(); //| jne ->interrupt_handler dasm_put(Dst, 1260); #line 3090 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jne >1 //|.cold_code dasm_put(Dst, 285); #line 3093 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| LOAD_IP_ADDR opline dasm_put(Dst, 63); if (GCC_GLOBAL_REGS) { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 501, ((ptrdiff_t)opline)); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 511, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } } #line 3095 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->interrupt_handler //|.code dasm_put(Dst, 1529); #line 3097 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } #endif return 1; } static int zend_jit_trace_end_loop(dasm_State **Dst, int loop_label, const void *timeout_exit_addr) { if (timeout_exit_addr) { //| MEM_CMP_ZTS byte, executor_globals, vm_interrupt, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.vm_interrupt)) { dasm_put(Dst, 27, &executor_globals.vm_interrupt); } else { dasm_put(Dst, 33, (unsigned int)(((ptrdiff_t)&executor_globals.vm_interrupt)), (unsigned int)((((ptrdiff_t)&executor_globals.vm_interrupt))>>32)); } #line 3106 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| je =>loop_label //| jmp &timeout_exit_addr dasm_put(Dst, 1535, loop_label, (ptrdiff_t)(timeout_exit_addr)); #line 3108 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp =>loop_label dasm_put(Dst, 1542, loop_label); #line 3110 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_check_exception(dasm_State **Dst) { //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.exception)) { dasm_put(Dst, 71, &executor_globals.exception); } else { dasm_put(Dst, 78, (unsigned int)(((ptrdiff_t)&executor_globals.exception)), (unsigned int)((((ptrdiff_t)&executor_globals.exception))>>32)); } #line 3117 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne ->exception_handler dasm_put(Dst, 1546); #line 3118 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_check_exception_undef_result(dasm_State **Dst, const zend_op *opline) { if (opline->result_type & (IS_TMP_VAR|IS_VAR)) { //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.exception)) { dasm_put(Dst, 71, &executor_globals.exception); } else { dasm_put(Dst, 78, (unsigned int)(((ptrdiff_t)&executor_globals.exception)), (unsigned int)((((ptrdiff_t)&executor_globals.exception))>>32)); } #line 3125 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne ->exception_handler_undef dasm_put(Dst, 1551); #line 3126 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } return zend_jit_check_exception(Dst); } static int zend_jit_trace_begin(dasm_State **Dst, uint32_t trace_num, zend_jit_trace_info *parent, uint32_t exit_num) { zend_regset regset = ZEND_REGSET_SCRATCH; #if ZTS if (1) { #else if ((sizeof(void*) == 8 && !IS_SIGNED_32BIT(&EG(jit_trace_num)))) { #endif /* assignment to EG(jit_trace_num) shouldn't clober CPU register used by deoptimizer */ if (parent) { int i; int parent_vars_count = parent->exit_info[exit_num].stack_size; zend_jit_trace_stack *parent_stack = parent->stack_map + parent->exit_info[exit_num].stack_offset; for (i = 0; i < parent_vars_count; i++) { if (STACK_REG(parent_stack, i) != ZREG_NONE) { if (STACK_REG(parent_stack, i) < ZREG_NUM) { ZEND_REGSET_EXCL(regset, STACK_REG(parent_stack, i)); } else if (STACK_REG(parent_stack, i) == ZREG_ZVAL_COPY_GPR0) { ZEND_REGSET_EXCL(regset, ZREG_R0); } } } } } if (parent && parent->exit_info[exit_num].flags & ZEND_JIT_EXIT_METHOD_CALL) { ZEND_REGSET_EXCL(regset, ZREG_R0); } current_trace_num = trace_num; //| // EG(jit_trace_num) = trace_num; if (regset == ZEND_REGSET_EMPTY) { //| push r0 //| MEM_STORE_ZTS dword, executor_globals, jit_trace_num, trace_num, r0 dasm_put(Dst, 1556); if (IS_SIGNED_32BIT(&executor_globals.jit_trace_num)) { dasm_put(Dst, 1558, &executor_globals.jit_trace_num, trace_num); } else { dasm_put(Dst, 1564, (unsigned int)(((ptrdiff_t)&executor_globals.jit_trace_num)), (unsigned int)((((ptrdiff_t)&executor_globals.jit_trace_num))>>32), trace_num); } #line 3170 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| pop r0 dasm_put(Dst, 1383); #line 3171 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { zend_reg tmp = ZEND_REGSET_FIRST(regset); //| MEM_STORE_ZTS dword, executor_globals, jit_trace_num, trace_num, Ra(tmp) if (IS_SIGNED_32BIT(&executor_globals.jit_trace_num)) { dasm_put(Dst, 1558, &executor_globals.jit_trace_num, trace_num); } else { dasm_put(Dst, 1572, (tmp), (unsigned int)(((ptrdiff_t)&executor_globals.jit_trace_num)), (unsigned int)((((ptrdiff_t)&executor_globals.jit_trace_num))>>32), (tmp), 0, trace_num); } #line 3175 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" (void)tmp; } return 1; } static int zend_jit_trace_end(dasm_State **Dst, zend_jit_trace_info *t) { //|.cold_code dasm_put(Dst, 289); #line 3184 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|=>1: // end of the code //|.code dasm_put(Dst, 1587, 1); #line 3186 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } /* This taken from LuaJIT. Thanks to Mike Pall. */ static uint32_t _asm_x86_inslen(const uint8_t* p) { static const uint8_t map_op1[256] = { 0x92,0x92,0x92,0x92,0x52,0x45,0x51,0x51,0x92,0x92,0x92,0x92,0x52,0x45,0x51,0x20, 0x92,0x92,0x92,0x92,0x52,0x45,0x51,0x51,0x92,0x92,0x92,0x92,0x52,0x45,0x51,0x51, 0x92,0x92,0x92,0x92,0x52,0x45,0x10,0x51,0x92,0x92,0x92,0x92,0x52,0x45,0x10,0x51, 0x92,0x92,0x92,0x92,0x52,0x45,0x10,0x51,0x92,0x92,0x92,0x92,0x52,0x45,0x10,0x51, #if defined(__x86_64__) || defined(_M_X64) 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, #else 0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51, #endif 0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51, 0x51,0x51,0x92,0x92,0x10,0x10,0x12,0x11,0x45,0x86,0x52,0x93,0x51,0x51,0x51,0x51, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52, 0x93,0x86,0x93,0x93,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92, 0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x47,0x51,0x51,0x51,0x51,0x51, #if defined(__x86_64__) || defined(_M_X64) 0x59,0x59,0x59,0x59,0x51,0x51,0x51,0x51,0x52,0x45,0x51,0x51,0x51,0x51,0x51,0x51, #else 0x55,0x55,0x55,0x55,0x51,0x51,0x51,0x51,0x52,0x45,0x51,0x51,0x51,0x51,0x51,0x51, #endif 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05, 0x93,0x93,0x53,0x51,0x70,0x71,0x93,0x86,0x54,0x51,0x53,0x51,0x51,0x52,0x51,0x51, 0x92,0x92,0x92,0x92,0x52,0x52,0x51,0x51,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x45,0x45,0x47,0x52,0x51,0x51,0x51,0x51, 0x10,0x51,0x10,0x10,0x51,0x51,0x63,0x66,0x51,0x51,0x51,0x51,0x51,0x51,0x92,0x92 }; static const uint8_t map_op2[256] = { 0x93,0x93,0x93,0x93,0x52,0x52,0x52,0x52,0x52,0x52,0x51,0x52,0x51,0x93,0x52,0x94, 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x34,0x51,0x35,0x51,0x51,0x51,0x51,0x51, 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, 0x53,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, 0x94,0x54,0x54,0x54,0x93,0x93,0x93,0x52,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, 0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46, 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, 0x52,0x52,0x52,0x93,0x94,0x93,0x51,0x51,0x52,0x52,0x52,0x93,0x94,0x93,0x93,0x93, 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x94,0x93,0x93,0x93,0x93,0x93, 0x93,0x93,0x94,0x93,0x94,0x94,0x94,0x93,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52, 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x52 }; uint32_t result = 0; uint32_t prefixes = 0; uint32_t x = map_op1[*p]; for (;;) { switch (x >> 4) { case 0: return result + x + (prefixes & 4); case 1: prefixes |= x; x = map_op1[*++p]; result++; break; case 2: x = map_op2[*++p]; break; case 3: p++; goto mrm; case 4: result -= (prefixes & 2); /* fallthrough */ case 5: return result + (x & 15); case 6: /* Group 3. */ if (p[1] & 0x38) { x = 2; } else if ((prefixes & 2) && (x == 0x66)) { x = 4; } goto mrm; case 7: /* VEX c4/c5. */ #if !defined(__x86_64__) && !defined(_M_X64) if (p[1] < 0xc0) { x = 2; goto mrm; } #endif if (x == 0x70) { x = *++p & 0x1f; result++; if (x >= 2) { p += 2; result += 2; goto mrm; } } p++; result++; x = map_op2[*++p]; break; case 8: result -= (prefixes & 2); /* fallthrough */ case 9: mrm: /* ModR/M and possibly SIB. */ result += (x & 15); x = *++p; switch (x >> 6) { case 0: if ((x & 7) == 5) { return result + 4; } break; case 1: result++; break; case 2: result += 4; break; case 3: return result; } if ((x & 7) == 4) { result++; if (x < 0x40 && (p[1] & 7) == 5) { result += 4; } } return result; } } } typedef ZEND_SET_ALIGNED(1, uint16_t unaligned_uint16_t); typedef ZEND_SET_ALIGNED(1, int32_t unaligned_int32_t); static int zend_jit_patch(const void *code, size_t size, uint32_t jmp_table_size, const void *from_addr, const void *to_addr) { int ret = 0; uint8_t *p, *end; if (jmp_table_size) { const void **jmp_slot = (const void **)((char*)code + ZEND_MM_ALIGNED_SIZE_EX(size, sizeof(void*))); do { if (*jmp_slot == from_addr) { *jmp_slot = to_addr; ret++; } jmp_slot++; } while (--jmp_table_size); } p = (uint8_t*)code; end = p + size - 5; while (p < end) { if ((*(unaligned_uint16_t*)p & 0xf0ff) == 0x800f && p + *(unaligned_int32_t*)(p+2) == (uint8_t*)from_addr - 6) { *(unaligned_int32_t*)(p+2) = ((uint8_t*)to_addr - (p + 6)); ret++; } else if (*p == 0xe9 && p + *(unaligned_int32_t*)(p+1) == (uint8_t*)from_addr - 5) { *(unaligned_int32_t*)(p+1) = ((uint8_t*)to_addr - (p + 5)); ret++; } p += _asm_x86_inslen(p); } #ifdef HAVE_VALGRIND VALGRIND_DISCARD_TRANSLATIONS(code, size); #endif return ret; } static int zend_jit_link_side_trace(const void *code, size_t size, uint32_t jmp_table_size, uint32_t exit_num, const void *addr) { return zend_jit_patch(code, size, jmp_table_size, zend_jit_trace_get_exit_addr(exit_num), addr); } static int zend_jit_trace_link_to_root(dasm_State **Dst, zend_jit_trace_info *t, const void *timeout_exit_addr) { const void *link_addr; size_t prologue_size; /* Skip prologue. */ // TODO: don't hardcode this ??? if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { #ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE prologue_size = 0; #elif defined(__x86_64__) || defined(_M_X64) // sub r4, HYBRID_SPAD prologue_size = 4; #else // sub r4, HYBRID_SPAD prologue_size = 3; #endif } else if (GCC_GLOBAL_REGS) { // sub r4, SPAD // stack alignment #if defined(__x86_64__) || defined(_M_X64) prologue_size = 4; #else prologue_size = 3; #endif } else { // sub r4, NR_SPAD // stack alignment // mov aword T2, FP // save FP // mov aword T3, RX // save IP // mov FP, FCARG1a #if defined(__x86_64__) || defined(_M_X64) prologue_size = 17; #else prologue_size = 13; #endif } link_addr = (const void*)((const char*)t->code_start + prologue_size + ENDBR_PADDING); if (timeout_exit_addr) { /* Check timeout for links to LOOP */ //| MEM_CMP_ZTS byte, executor_globals, vm_interrupt, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.vm_interrupt)) { dasm_put(Dst, 27, &executor_globals.vm_interrupt); } else { dasm_put(Dst, 33, (unsigned int)(((ptrdiff_t)&executor_globals.vm_interrupt)), (unsigned int)((((ptrdiff_t)&executor_globals.vm_interrupt))>>32)); } #line 3404 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| je &link_addr //| jmp &timeout_exit_addr dasm_put(Dst, 1590, (ptrdiff_t)(link_addr), (ptrdiff_t)(timeout_exit_addr)); #line 3406 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp &link_addr dasm_put(Dst, 150, (ptrdiff_t)(link_addr)); #line 3408 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_trace_return(dasm_State **Dst, bool original_handler, const zend_op *opline) { #if 0 //| jmp ->trace_escape dasm_put(Dst, 1597); #line 3416 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #else if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { //| ADD_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 101); #endif #line 3419 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!original_handler) { //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 3421 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov r0, EX->func //| mov r0, aword [r0 + offsetof(zend_op_array, reserved[zend_func_info_rid])] //| mov r0, aword [r0 + offsetof(zend_jit_op_array_trace_extension, offset)] //| jmp aword [IP + r0] dasm_put(Dst, 1265, Dt1(->func), offsetof(zend_op_array, reserved[zend_func_info_rid]), offsetof(zend_jit_op_array_trace_extension, offset)); #line 3426 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (GCC_GLOBAL_REGS) { //| add r4, SPAD // stack alignment dasm_put(Dst, 119); #line 3429 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!original_handler) { //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 3431 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov r0, EX->func //| mov r0, aword [r0 + offsetof(zend_op_array, reserved[zend_func_info_rid])] //| mov r0, aword [r0 + offsetof(zend_jit_op_array_trace_extension, offset)] //| jmp aword [IP + r0] dasm_put(Dst, 1265, Dt1(->func), offsetof(zend_op_array, reserved[zend_func_info_rid]), offsetof(zend_jit_op_array_trace_extension, offset)); #line 3436 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (original_handler) { //| mov FCARG1a, FP //| mov r0, EX->func //| mov r0, aword [r0 + offsetof(zend_op_array, reserved[zend_func_info_rid])] //| mov r0, aword [r0 + offsetof(zend_jit_op_array_trace_extension, offset)] //| call aword [IP + r0] dasm_put(Dst, 1602, Dt1(->func), offsetof(zend_op_array, reserved[zend_func_info_rid]), offsetof(zend_jit_op_array_trace_extension, offset)); #line 3444 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov FP, aword T2 // restore FP //| mov RX, aword T3 // restore IP //| add r4, NR_SPAD // stack alignment dasm_put(Dst, 456); #line 3448 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!original_handler || !opline || (opline->opcode != ZEND_RETURN && opline->opcode != ZEND_RETURN_BY_REF && opline->opcode != ZEND_GENERATOR_RETURN && opline->opcode != ZEND_GENERATOR_CREATE && opline->opcode != ZEND_YIELD && opline->opcode != ZEND_YIELD_FROM)) { //| mov r0, 2 // ZEND_VM_LEAVE dasm_put(Dst, 1624); #line 3456 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| ret dasm_put(Dst, 145); #line 3458 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } #endif return 1; } static int zend_jit_type_guard(dasm_State **Dst, const zend_op *opline, uint32_t var, uint8_t type) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_NOT_Z_TYPE FP + var, type, &exit_addr dasm_put(Dst, 1632, var+offsetof(zval, u1.v.type), type, (ptrdiff_t)(exit_addr)); #line 3472 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_scalar_type_guard(dasm_State **Dst, const zend_op *opline, uint32_t var) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| cmp byte [FP+var+offsetof(zval, u1.v.type)], IS_STRING //| jae &exit_addr dasm_put(Dst, 1641, var+offsetof(zval, u1.v.type), IS_STRING, (ptrdiff_t)(exit_addr)); #line 3486 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_packed_guard(dasm_State **Dst, const zend_op *opline, uint32_t var, uint32_t op_info) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_PACKED_GUARD); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| GET_ZVAL_LVAL ZREG_FCARG1, ZEND_ADDR_MEM_ZVAL(ZREG_FP, var) if (Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var)) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var))) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var))))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var)))), (unsigned int)((Z_LVAL_P(Z_ZV(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var))))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var)))); } } } else if (Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var)) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var))); } else if (Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var)) == IS_REG) { if (ZREG_FCARG1 != Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var))) { dasm_put(Dst, 1682, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var))), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } #line 3500 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op_info & MAY_BE_ARRAY_PACKED) { //| test dword [FCARG1a + offsetof(zend_array, u.flags)], HASH_FLAG_PACKED //| jz &exit_addr dasm_put(Dst, 1690, offsetof(zend_array, u.flags), HASH_FLAG_PACKED, (ptrdiff_t)(exit_addr)); #line 3503 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| test dword [FCARG1a + offsetof(zend_array, u.flags)], HASH_FLAG_PACKED //| jnz &exit_addr dasm_put(Dst, 1699, offsetof(zend_array, u.flags), HASH_FLAG_PACKED, (ptrdiff_t)(exit_addr)); #line 3506 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_array, const zend_op *opline, int may_throw, zend_jit_trace_rec *trace) { zend_jit_op_array_trace_extension *jit_extension = (zend_jit_op_array_trace_extension*)ZEND_FUNC_INFO(op_array); size_t offset = jit_extension->offset; const void *handler = (zend_vm_opcode_handler_t)ZEND_OP_TRACE_INFO(opline, offset)->call_handler; if (!zend_jit_set_valid_ip(Dst, opline)) { return 0; } if (!GCC_GLOBAL_REGS) { //| mov FCARG1a, FP dasm_put(Dst, 66); #line 3524 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL handler, r0 if (MAY_USE_32BIT_ADDR(handler)) { dasm_put(Dst, 46, (ptrdiff_t)(handler)); } else { if (IS_SIGNED_32BIT(handler)) { dasm_put(Dst, 49, ((ptrdiff_t)handler)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); } dasm_put(Dst, 59); } #line 3526 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw && opline->opcode != ZEND_RETURN && opline->opcode != ZEND_RETURN_BY_REF) { //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r1 if (IS_SIGNED_32BIT(&executor_globals.exception)) { dasm_put(Dst, 71, &executor_globals.exception); } else { dasm_put(Dst, 1708, (unsigned int)(((ptrdiff_t)&executor_globals.exception)), (unsigned int)((((ptrdiff_t)&executor_globals.exception))>>32)); } #line 3530 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne ->exception_handler dasm_put(Dst, 1546); #line 3531 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } while (trace->op != ZEND_JIT_TRACE_VM && trace->op != ZEND_JIT_TRACE_END) { trace++; } if (!GCC_GLOBAL_REGS && (trace->op != ZEND_JIT_TRACE_END || trace->stop != ZEND_JIT_TRACE_STOP_RETURN)) { if (opline->opcode == ZEND_RETURN || opline->opcode == ZEND_RETURN_BY_REF || opline->opcode == ZEND_DO_UCALL || opline->opcode == ZEND_DO_FCALL_BY_NAME || opline->opcode == ZEND_DO_FCALL || opline->opcode == ZEND_GENERATOR_CREATE) { //| MEM_LOAD_ZTS FP, aword, executor_globals, current_execute_data, r1 if (IS_SIGNED_32BIT(&executor_globals.current_execute_data)) { dasm_put(Dst, 87, &executor_globals.current_execute_data); } else { dasm_put(Dst, 1717, (unsigned int)(((ptrdiff_t)&executor_globals.current_execute_data)), (unsigned int)((((ptrdiff_t)&executor_globals.current_execute_data))>>32)); } #line 3546 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (zend_jit_trace_may_exit(op_array, opline)) { if (opline->opcode == ZEND_RETURN || opline->opcode == ZEND_RETURN_BY_REF || opline->opcode == ZEND_GENERATOR_CREATE) { if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { if (trace->op != ZEND_JIT_TRACE_END || (trace->stop != ZEND_JIT_TRACE_STOP_RETURN && trace->stop != ZEND_JIT_TRACE_STOP_INTERPRETER)) { /* this check may be handled by the following OPLINE guard or jmp [IP] */ //| cmp IP, zend_jit_halt_op //| je ->trace_halt dasm_put(Dst, 1725, zend_jit_halt_op); #line 3561 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (GCC_GLOBAL_REGS) { //| test IP, IP //| je ->trace_halt dasm_put(Dst, 1735); #line 3565 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| test eax, eax //| jl ->trace_halt dasm_put(Dst, 1744); #line 3568 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (opline->opcode == ZEND_EXIT || opline->opcode == ZEND_GENERATOR_RETURN || opline->opcode == ZEND_YIELD || opline->opcode == ZEND_YIELD_FROM) { //| jmp ->trace_halt dasm_put(Dst, 1751); #line 3574 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (trace->op != ZEND_JIT_TRACE_END || (trace->stop != ZEND_JIT_TRACE_STOP_RETURN && trace->stop != ZEND_JIT_TRACE_STOP_INTERPRETER)) { const zend_op *next_opline = trace->opline; const zend_op *exit_opline = NULL; uint32_t exit_point; const void *exit_addr; uint32_t old_info = 0; uint32_t old_res_info = 0; zend_jit_trace_stack *stack = JIT_G(current_frame)->stack; if (zend_is_smart_branch(opline)) { bool exit_if_true = 0; exit_opline = zend_jit_trace_get_exit_opline(trace, opline + 1, &exit_if_true); } else { switch (opline->opcode) { case ZEND_JMPZ: case ZEND_JMPNZ: case ZEND_JMPZ_EX: case ZEND_JMPNZ_EX: case ZEND_JMP_SET: case ZEND_COALESCE: case ZEND_JMP_NULL: case ZEND_FE_RESET_R: case ZEND_FE_RESET_RW: exit_opline = (trace->opline == opline + 1) ? OP_JMP_ADDR(opline, opline->op2) : opline + 1; break; case ZEND_FE_FETCH_R: case ZEND_FE_FETCH_RW: exit_opline = (trace->opline == opline + 1) ? ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value) : opline + 1; break; } } switch (opline->opcode) { case ZEND_FE_FETCH_R: case ZEND_FE_FETCH_RW: if (opline->op2_type != IS_UNUSED) { old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var)); SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var), IS_UNKNOWN, 1); } break; } if (opline->result_type == IS_VAR || opline->result_type == IS_TMP_VAR) { old_res_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1); } exit_point = zend_jit_trace_get_exit_point(exit_opline, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (opline->result_type == IS_VAR || opline->result_type == IS_TMP_VAR) { SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_res_info); } switch (opline->opcode) { case ZEND_FE_FETCH_R: case ZEND_FE_FETCH_RW: if (opline->op2_type != IS_UNUSED) { SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var), old_info); } break; } if (!exit_addr) { return 0; } //| CMP_IP next_opline if (GCC_GLOBAL_REGS) { dasm_put(Dst, 1756, next_opline); } else { dasm_put(Dst, 1762, Dt1(->opline), next_opline); } #line 3648 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 3649 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } zend_jit_set_last_valid_opline(trace->opline); return 1; } static int zend_jit_handler(dasm_State **Dst, const zend_op *opline, int may_throw) { const void *handler; if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { handler = zend_get_opcode_handler_func(opline); } else { handler = opline->handler; } if (!zend_jit_set_valid_ip(Dst, opline)) { return 0; } if (!GCC_GLOBAL_REGS) { //| mov FCARG1a, FP dasm_put(Dst, 66); #line 3672 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL handler, r0 if (MAY_USE_32BIT_ADDR(handler)) { dasm_put(Dst, 46, (ptrdiff_t)(handler)); } else { if (IS_SIGNED_32BIT(handler)) { dasm_put(Dst, 49, ((ptrdiff_t)handler)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); } dasm_put(Dst, 59); } #line 3674 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception(Dst); } /* Skip the following OP_DATA */ switch (opline->opcode) { case ZEND_ASSIGN_DIM: case ZEND_ASSIGN_OBJ: case ZEND_ASSIGN_STATIC_PROP: case ZEND_ASSIGN_DIM_OP: case ZEND_ASSIGN_OBJ_OP: case ZEND_ASSIGN_STATIC_PROP_OP: case ZEND_ASSIGN_STATIC_PROP_REF: case ZEND_ASSIGN_OBJ_REF: zend_jit_set_last_valid_opline(opline + 2); break; default: zend_jit_set_last_valid_opline(opline + 1); break; } return 1; } static int zend_jit_tail_handler(dasm_State **Dst, const zend_op *opline) { if (!zend_jit_set_valid_ip(Dst, opline)) { return 0; } if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { if (opline->opcode == ZEND_DO_UCALL || opline->opcode == ZEND_DO_FCALL_BY_NAME || opline->opcode == ZEND_DO_FCALL || opline->opcode == ZEND_RETURN) { /* Use inlined HYBRID VM handler */ const void *handler = opline->handler; //| ADD_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 101); #endif #line 3713 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_JMP handler, r0 if (MAY_USE_32BIT_ADDR(handler)) { dasm_put(Dst, 150, (ptrdiff_t)(handler)); } else { if (IS_SIGNED_32BIT(handler)) { dasm_put(Dst, 49, ((ptrdiff_t)handler)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); } dasm_put(Dst, 154); } #line 3714 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { const void *handler = zend_get_opcode_handler_func(opline); //| EXT_CALL handler, r0 if (MAY_USE_32BIT_ADDR(handler)) { dasm_put(Dst, 46, (ptrdiff_t)(handler)); } else { if (IS_SIGNED_32BIT(handler)) { dasm_put(Dst, 49, ((ptrdiff_t)handler)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); } dasm_put(Dst, 59); } #line 3718 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ADD_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 101); #endif #line 3719 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 3720 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { const void *handler = opline->handler; if (GCC_GLOBAL_REGS) { //| add r4, SPAD // stack alignment dasm_put(Dst, 119); #line 3726 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov FCARG1a, FP //| mov FP, aword T2 // restore FP //| mov RX, aword T3 // restore IP //| add r4, NR_SPAD // stack alignment dasm_put(Dst, 1768); #line 3731 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_JMP handler, r0 if (MAY_USE_32BIT_ADDR(handler)) { dasm_put(Dst, 150, (ptrdiff_t)(handler)); } else { if (IS_SIGNED_32BIT(handler)) { dasm_put(Dst, 49, ((ptrdiff_t)handler)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); } dasm_put(Dst, 154); } #line 3733 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } zend_jit_reset_last_valid_opline(); return 1; } static int zend_jit_trace_opline_guard(dasm_State **Dst, const zend_op *opline) { uint32_t exit_point = zend_jit_trace_get_exit_point(NULL, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| CMP_IP opline if (GCC_GLOBAL_REGS) { dasm_put(Dst, 1756, opline); } else { dasm_put(Dst, 1762, Dt1(->opline), opline); } #line 3747 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 3748 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" zend_jit_set_last_valid_opline(opline); return 1; } static int zend_jit_jmp(dasm_State **Dst, unsigned int target_label) { //| jmp =>target_label dasm_put(Dst, 1542, target_label); #line 3757 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_cond_jmp(dasm_State **Dst, const zend_op *next_opline, unsigned int target_label) { //| CMP_IP next_opline if (GCC_GLOBAL_REGS) { dasm_put(Dst, 1756, next_opline); } else { dasm_put(Dst, 1762, Dt1(->opline), next_opline); } #line 3763 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne =>target_label dasm_put(Dst, 1787, target_label); #line 3764 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" zend_jit_set_last_valid_opline(next_opline); return 1; } #ifdef CONTEXT_THREADED_JIT static int zend_jit_context_threaded_call(dasm_State **Dst, const zend_op *opline, unsigned int next_block) { if (!zend_jit_handler(Dst, opline, 1)) return 0; if (opline->opcode == ZEND_DO_UCALL) { //| call ->context_threaded_call dasm_put(Dst, 1791); #line 3776 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { const zend_op *next_opline = opline + 1; //| CMP_IP next_opline if (GCC_GLOBAL_REGS) { dasm_put(Dst, 1756, next_opline); } else { dasm_put(Dst, 1762, Dt1(->opline), next_opline); } #line 3780 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| je =>next_block //| call ->context_threaded_call dasm_put(Dst, 1795, next_block); #line 3782 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } #endif static int zend_jit_call(dasm_State **Dst, const zend_op *opline, unsigned int next_block) { #ifdef CONTEXT_THREADED_JIT return zend_jit_context_threaded_call(Dst, opline, next_block); #else return zend_jit_tail_handler(Dst, opline); #endif } static int zend_jit_spill_store(dasm_State **Dst, zend_jit_addr src, zend_jit_addr dst, uint32_t info, bool set_type) { ZEND_ASSERT(Z_MODE(src) == IS_REG); ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); if ((info & MAY_BE_ANY) == MAY_BE_LONG) { //| SET_ZVAL_LVAL dst, Ra(Z_REG(src)) if (Z_MODE(dst) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(src)), (Z_REG(dst))); } else { ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(src)), (Z_REG(dst)), Z_OFFSET(dst)); } #line 3803 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (set_type && (Z_REG(dst) != ZREG_FP || !JIT_G(current_frame) || STACK_MEM_TYPE(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(Z_OFFSET(dst))) != IS_LONG)) { //| SET_ZVAL_TYPE_INFO dst, IS_LONG ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_LONG); #line 3808 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if ((info & MAY_BE_ANY) == MAY_BE_DOUBLE) { //| DOUBLE_SET_ZVAL_DVAL dst, Z_REG(src) if (Z_MODE(dst) == IS_REG) { if (Z_REG(src) != Z_REG(dst)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(dst)-ZREG_XMM0), (Z_REG(src)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(dst)-ZREG_XMM0), (Z_REG(src)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(src)-ZREG_XMM0), (Z_REG(dst)), Z_OFFSET(dst)); } else { dasm_put(Dst, 1844, (Z_REG(src)-ZREG_XMM0), (Z_REG(dst)), Z_OFFSET(dst)); } } #line 3811 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (set_type && (Z_REG(dst) != ZREG_FP || !JIT_G(current_frame) || STACK_MEM_TYPE(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(Z_OFFSET(dst))) != IS_DOUBLE)) { //| SET_ZVAL_TYPE_INFO dst, IS_DOUBLE ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_DOUBLE); #line 3816 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { ZEND_UNREACHABLE(); } return 1; } static int zend_jit_load_reg(dasm_State **Dst, zend_jit_addr src, zend_jit_addr dst, uint32_t info) { ZEND_ASSERT(Z_MODE(src) == IS_MEM_ZVAL); ZEND_ASSERT(Z_MODE(dst) == IS_REG); if ((info & MAY_BE_ANY) == MAY_BE_LONG) { //| GET_ZVAL_LVAL Z_REG(dst), src if (Z_MODE(src) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(src)) == 0) { dasm_put(Dst, 1650, (Z_REG(dst)), (Z_REG(dst))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(src)))) { dasm_put(Dst, 1658, (Z_REG(dst)), (unsigned int)(Z_LVAL_P(Z_ZV(src))), (unsigned int)((Z_LVAL_P(Z_ZV(src)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(dst)), Z_LVAL_P(Z_ZV(src))); } } } else if (Z_MODE(src) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(dst)), (Z_REG(src)), Z_OFFSET(src)); } else if (Z_MODE(src) == IS_REG) { if (Z_REG(dst) != Z_REG(src)) { dasm_put(Dst, 1682, (Z_REG(src)), (Z_REG(dst))); } } else { ZEND_UNREACHABLE(); } #line 3830 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if ((info & MAY_BE_ANY) == MAY_BE_DOUBLE) { //| DOUBLE_GET_ZVAL_DVAL Z_REG(dst), src if (Z_MODE(src) != IS_REG || Z_REG(dst) != Z_REG(src)) { if (Z_MODE(src) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(src))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(dst)-ZREG_XMM0), Z_ZV(src)); } else { dasm_put(Dst, 1867, (Z_REG(dst)-ZREG_XMM0), Z_ZV(src)); } } else { if (IS_SIGNED_32BIT(Z_ZV(src))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(src))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(src))), (unsigned int)((((ptrdiff_t)Z_ZV(src)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(dst)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(dst)-ZREG_XMM0)); } } } else if (Z_MODE(src) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(dst)-ZREG_XMM0), (Z_REG(src)), Z_OFFSET(src)); } else { dasm_put(Dst, 1907, (Z_REG(dst)-ZREG_XMM0), (Z_REG(src)), Z_OFFSET(src)); } } else if (Z_MODE(src) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(dst)-ZREG_XMM0), (Z_REG(src)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(dst)-ZREG_XMM0), (Z_REG(src)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } #line 3832 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } return 1; } static int zend_jit_store_var(dasm_State **Dst, uint32_t info, int var, zend_reg reg, bool set_type) { zend_jit_addr src = ZEND_ADDR_REG(reg); zend_jit_addr dst = ZEND_ADDR_MEM_ZVAL(ZREG_FP, EX_NUM_TO_VAR(var)); return zend_jit_spill_store(Dst, src, dst, info, set_type); } static int zend_jit_store_var_type(dasm_State **Dst, int var, uint32_t type) { zend_jit_addr dst = ZEND_ADDR_MEM_ZVAL(ZREG_FP, EX_NUM_TO_VAR(var)); //| SET_ZVAL_TYPE_INFO dst, type ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), type); #line 3851 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_store_var_if_necessary(dasm_State **Dst, int var, zend_jit_addr src, uint32_t info) { if (Z_MODE(src) == IS_REG && Z_STORE(src)) { zend_jit_addr dst = ZEND_ADDR_MEM_ZVAL(ZREG_FP, var); return zend_jit_spill_store(Dst, src, dst, info, 1); } return 1; } static int zend_jit_store_var_if_necessary_ex(dasm_State **Dst, int var, zend_jit_addr src, uint32_t info, zend_jit_addr old, uint32_t old_info) { if (Z_MODE(src) == IS_REG && Z_STORE(src)) { zend_jit_addr dst = ZEND_ADDR_MEM_ZVAL(ZREG_FP, var); bool set_type = 1; if ((info & (MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)) == (old_info & (MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF))) { if (Z_MODE(old) != IS_REG || Z_LOAD(old) || Z_STORE(old)) { set_type = 0; } } return zend_jit_spill_store(Dst, src, dst, info, set_type); } return 1; } static int zend_jit_load_var(dasm_State **Dst, uint32_t info, int var, zend_reg reg) { zend_jit_addr src = ZEND_ADDR_MEM_ZVAL(ZREG_FP, EX_NUM_TO_VAR(var)); zend_jit_addr dst = ZEND_ADDR_REG(reg); return zend_jit_load_reg(Dst, src, dst, info); } static int zend_jit_invalidate_var_if_necessary(dasm_State **Dst, zend_uchar op_type, zend_jit_addr addr, znode_op op) { if ((op_type & (IS_TMP_VAR|IS_VAR)) && Z_MODE(addr) == IS_REG && !Z_LOAD(addr) && !Z_STORE(addr)) { zend_jit_addr dst = ZEND_ADDR_MEM_ZVAL(ZREG_FP, op.var); //| SET_ZVAL_TYPE_INFO dst, IS_UNDEF ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_UNDEF); #line 3893 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_update_regs(dasm_State **Dst, uint32_t var, zend_jit_addr src, zend_jit_addr dst, uint32_t info) { if (!zend_jit_same_addr(src, dst)) { if (Z_MODE(src) == IS_REG) { if (Z_MODE(dst) == IS_REG) { if ((info & MAY_BE_ANY) == MAY_BE_LONG) { //| mov Ra(Z_REG(dst)), Ra(Z_REG(src)) dasm_put(Dst, 1682, (Z_REG(src)), (Z_REG(dst))); #line 3904 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if ((info & MAY_BE_ANY) == MAY_BE_DOUBLE) { //| SSE_AVX_INS movaps, vmovaps, xmm(Z_REG(dst)-ZREG_XMM0), xmm(Z_REG(src)-ZREG_XMM0) if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(dst)-ZREG_XMM0), (Z_REG(src)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(dst)-ZREG_XMM0), (Z_REG(src)-ZREG_XMM0)); } #line 3906 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } if (!Z_LOAD(src) && !Z_STORE(src) && Z_STORE(dst)) { zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, var); if (!zend_jit_spill_store(Dst, dst, var_addr, info, JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || JIT_G(current_frame) == NULL || STACK_MEM_TYPE(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(var)) == IS_UNKNOWN || (1 << STACK_MEM_TYPE(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(var))) != (info & MAY_BE_ANY) )) { return 0; } } } else if (Z_MODE(dst) == IS_MEM_ZVAL) { if (!Z_LOAD(src) && !Z_STORE(src)) { if (!zend_jit_spill_store(Dst, src, dst, info, JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || JIT_G(current_frame) == NULL || STACK_MEM_TYPE(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(var)) == IS_UNKNOWN || (1 << STACK_MEM_TYPE(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(var))) != (info & MAY_BE_ANY) )) { return 0; } } } else { ZEND_UNREACHABLE(); } } else if (Z_MODE(src) == IS_MEM_ZVAL) { if (Z_MODE(dst) == IS_REG) { if (!zend_jit_load_reg(Dst, src, dst, info)) { return 0; } } else { ZEND_UNREACHABLE(); } } else { ZEND_UNREACHABLE(); } } else if (Z_MODE(dst) == IS_REG && Z_STORE(dst)) { dst = ZEND_ADDR_MEM_ZVAL(ZREG_FP, var); if (!zend_jit_spill_store(Dst, src, dst, info, JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || JIT_G(current_frame) == NULL || STACK_MEM_TYPE(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(var)) == IS_UNKNOWN || (1 << STACK_MEM_TYPE(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(var))) != (info & MAY_BE_ANY) )) { return 0; } } return 1; } static int zend_jit_escape_if_undef_r0(dasm_State **Dst, int var, uint32_t flags, const zend_op *opline) { zend_jit_addr val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0); //| IF_NOT_ZVAL_TYPE val_addr, IS_UNDEF, >1 ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_UNDEF); #line 3965 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (flags & ZEND_JIT_EXIT_RESTORE_CALL) { if (!zend_jit_save_call_chain(Dst, -1)) { return 0; } } ZEND_ASSERT(opline); if ((opline-1)->opcode != ZEND_FETCH_CONSTANT && (opline-1)->opcode != ZEND_FETCH_LIST_R && ((opline-1)->op1_type & (IS_VAR|IS_TMP_VAR)) && !(flags & ZEND_JIT_EXIT_FREE_OP1)) { val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline-1)->op1.var); //| IF_NOT_ZVAL_REFCOUNTED val_addr, >2 ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); #line 3981 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_PTR r0, val_addr dasm_put(Dst, 1920, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); #line 3982 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_ADDREF r0 //|2: dasm_put(Dst, 1934, (Z_REG(val_addr)), Z_OFFSET(val_addr)); #line 3984 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_IP_ADDR (opline - 1) if (GCC_GLOBAL_REGS) { if (IS_SIGNED_32BIT((opline - 1))) { dasm_put(Dst, 501, ((ptrdiff_t)(opline - 1))); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)(opline - 1))), (unsigned int)((((ptrdiff_t)(opline - 1)))>>32)); } } else { if (IS_SIGNED_32BIT((opline - 1))) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)(opline - 1))); } else { dasm_put(Dst, 511, (unsigned int)(((ptrdiff_t)(opline - 1))), (unsigned int)((((ptrdiff_t)(opline - 1)))>>32), Dt1(->opline)); } } #line 3987 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->trace_escape //|1: dasm_put(Dst, 1947); #line 3989 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_store_const(dasm_State **Dst, int var, zend_reg reg) { zend_jit_addr dst = ZEND_ADDR_MEM_ZVAL(ZREG_FP, EX_NUM_TO_VAR(var)); if (reg == ZREG_LONG_MIN_MINUS_1) { //|.if X64 //| SET_ZVAL_LVAL dst, 0x00000000 if (Z_MODE(dst) == IS_REG) { dasm_put(Dst, 1954, (Z_REG(dst))); } else { ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1964, (Z_REG(dst)), Z_OFFSET(dst)); } #line 4000 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_W2 dst, 0xc3e00000 ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); #line 4001 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| SET_ZVAL_LVAL dst, 0x00200000 //| SET_ZVAL_W2 dst, 0xc1e00000 //|.endif //| SET_ZVAL_TYPE_INFO dst, IS_DOUBLE dasm_put(Dst, 1976, (Z_REG(dst)), Z_OFFSET(dst)+4); ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_DOUBLE); #line 4006 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (reg == ZREG_LONG_MIN) { //|.if X64 //| SET_ZVAL_LVAL dst, 0x00000000 if (Z_MODE(dst) == IS_REG) { dasm_put(Dst, 1954, (Z_REG(dst))); } else { ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1964, (Z_REG(dst)), Z_OFFSET(dst)); } #line 4009 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_W2 dst, 0x80000000 ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); #line 4010 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| SET_ZVAL_LVAL dst, ZEND_LONG_MIN //|.endif //| SET_ZVAL_TYPE_INFO dst, IS_LONG dasm_put(Dst, 1988, (Z_REG(dst)), Z_OFFSET(dst)+4); ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_LONG); #line 4014 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (reg == ZREG_LONG_MAX) { //|.if X64 //| SET_ZVAL_LVAL dst, 0xffffffff if (Z_MODE(dst) == IS_REG) { dasm_put(Dst, 2000, (Z_REG(dst))); } else { ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 2014, (Z_REG(dst)), Z_OFFSET(dst)); } #line 4017 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_W2 dst, 0x7fffffff ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); #line 4018 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| SET_ZVAL_LVAL dst, ZEND_LONG_MAX //|.endif //| SET_ZVAL_TYPE_INFO dst, IS_LONG dasm_put(Dst, 2030, (Z_REG(dst)), Z_OFFSET(dst)+4); ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_LONG); #line 4022 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (reg == ZREG_LONG_MAX_PLUS_1) { //|.if X64 //| SET_ZVAL_LVAL dst, 0 if (Z_MODE(dst) == IS_REG) { dasm_put(Dst, 1954, (Z_REG(dst))); } else { ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1964, (Z_REG(dst)), Z_OFFSET(dst)); } #line 4025 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_W2 dst, 0x43e00000 ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); #line 4026 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| SET_ZVAL_LVAL dst, 0 //| SET_ZVAL_W2 dst, 0x41e00000 //|.endif //| SET_ZVAL_TYPE_INFO dst, IS_DOUBLE dasm_put(Dst, 2045, (Z_REG(dst)), Z_OFFSET(dst)+4); ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_DOUBLE); #line 4031 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (reg == ZREG_NULL) { //| SET_ZVAL_TYPE_INFO dst, IS_NULL ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_NULL); #line 4033 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (reg == ZREG_ZVAL_TRY_ADDREF) { //| IF_NOT_ZVAL_REFCOUNTED dst, >1 ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); #line 4035 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_PTR r1, dst dasm_put(Dst, 2057, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); #line 4036 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_ADDREF r1 //|1: dasm_put(Dst, 2071, (Z_REG(dst)), Z_OFFSET(dst)); #line 4038 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (reg == ZREG_ZVAL_COPY_GPR0) { zend_jit_addr val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0); //| ZVAL_COPY_VALUE dst, -1, val_addr, -1, ZREG_R1, ZREG_R2 if (-1 & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((-1 & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(dst) != IS_REG || Z_REG(dst) != Z_REG(val_addr)) { if (Z_MODE(dst) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(dst))); } else { ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(val_addr)), (Z_REG(dst)), Z_OFFSET(dst)); } } } else if (Z_MODE(dst) == IS_REG) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(dst)), (Z_REG(dst))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (Z_REG(dst)), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(dst)), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(dst)), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (Z_REG(dst) != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(dst))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (ZREG_R2 != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(dst) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(dst))); } else { ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(dst)), Z_OFFSET(dst)); } } } else if ((-1 & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(dst) == IS_REG) { if (Z_REG(val_addr) != Z_REG(dst)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(dst)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(dst)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(dst)), Z_OFFSET(dst)); } else { dasm_put(Dst, 1844, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(dst)), Z_OFFSET(dst)); } } } else if (Z_MODE(dst) == IS_REG) { if (Z_MODE(val_addr) != IS_REG || Z_REG(dst) != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(dst)-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (Z_REG(dst)-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(dst)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(dst)-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(dst)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (Z_REG(dst)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(dst)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(dst)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(val_addr) != IS_REG || ZREG_XMM0 != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(dst) == IS_REG) { if (ZREG_XMM0 != Z_REG(dst)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(dst)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(dst)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(dst)), Z_OFFSET(dst)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(dst)), Z_OFFSET(dst)); } } } } else if (!(-1 & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(dst)), Z_OFFSET(dst)); } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(dst)), Z_OFFSET(dst)); } } if ((-1 & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(-1 & MAY_BE_GUARD) && has_concrete_type(-1 & MAY_BE_ANY)) { if (Z_MODE(dst) == IS_MEM_ZVAL) { if ((-1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (-1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(-1); ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R1), (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R1), (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info)); } #line 4042 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| TRY_ADDREF -1, ch, r2 if (-1 & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (-1 & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 2104); } dasm_put(Dst, 2112); } #line 4043 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } return 1; } static int zend_jit_free_trampoline(dasm_State **Dst) { //| /// if (UNEXPECTED(func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) //| test dword [r0 + offsetof(zend_function, common.fn_flags)], ZEND_ACC_CALL_VIA_TRAMPOLINE //| jz >1 //| mov FCARG1a, r0 //| EXT_CALL zend_jit_free_trampoline_helper, r0 dasm_put(Dst, 2118, offsetof(zend_function, common.fn_flags), ZEND_ACC_CALL_VIA_TRAMPOLINE); if (MAY_USE_32BIT_ADDR(zend_jit_free_trampoline_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_free_trampoline_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_free_trampoline_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_free_trampoline_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_free_trampoline_helper)), (unsigned int)((((ptrdiff_t)zend_jit_free_trampoline_helper))>>32)); } dasm_put(Dst, 59); } #line 4056 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 4057 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_inc_dec(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op1_def_info, zend_jit_addr op1_def_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr, int may_overflow, int may_throw) { if (op1_info & ((MAY_BE_UNDEF|MAY_BE_ANY)-MAY_BE_LONG)) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >2 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2131, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 4064 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode == ZEND_POST_INC || opline->opcode == ZEND_POST_DEC) { //| ZVAL_COPY_VALUE res_addr, res_use_info, op1_addr, MAY_BE_LONG, ZREG_R0, ZREG_R1 if (MAY_BE_LONG & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R1), (ZREG_R1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R1)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R1), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(op1_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(MAY_BE_LONG & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((MAY_BE_LONG & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(MAY_BE_LONG & MAY_BE_GUARD) && has_concrete_type(MAY_BE_LONG & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(MAY_BE_LONG); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 4067 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!zend_jit_update_regs(Dst, opline->op1.var, op1_addr, op1_def_addr, MAY_BE_LONG)) { return 0; } if (opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_POST_INC) { //| LONG_OP_WITH_32BIT_CONST add, op1_def_addr, Z_L(1) if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2144, (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr), Z_L(1)); } else if (Z_MODE(op1_def_addr) == IS_REG) { dasm_put(Dst, 2153, (Z_REG(op1_def_addr)), Z_L(1)); } else { ZEND_UNREACHABLE(); } #line 4073 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LONG_OP_WITH_32BIT_CONST sub, op1_def_addr, Z_L(1) if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2160, (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr), Z_L(1)); } else if (Z_MODE(op1_def_addr) == IS_REG) { dasm_put(Dst, 2169, (Z_REG(op1_def_addr)), Z_L(1)); } else { ZEND_UNREACHABLE(); } #line 4075 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (may_overflow && (((op1_def_info & MAY_BE_GUARD) && (op1_def_info & MAY_BE_LONG)) || ((opline->result_type != IS_UNUSED && (res_info & MAY_BE_GUARD) && (res_info & MAY_BE_LONG))))) { int32_t exit_point; const void *exit_addr; zend_jit_trace_stack *stack; uint32_t old_op1_info, old_res_info = 0; stack = JIT_G(current_frame)->stack; old_op1_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var)); SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var), IS_DOUBLE, 0); if (opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_POST_INC) { SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->op1.var), ZREG_LONG_MAX_PLUS_1); } else { SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->op1.var), ZREG_LONG_MIN_MINUS_1); } if (opline->result_type != IS_UNUSED) { old_res_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); if (opline->opcode == ZEND_PRE_INC) { SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_DOUBLE, 0); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_LONG_MAX_PLUS_1); } else if (opline->opcode == ZEND_PRE_DEC) { SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_DOUBLE, 0); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_LONG_MIN_MINUS_1); } else if (opline->opcode == ZEND_POST_INC) { SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_LONG, 0); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_LONG_MAX); } else if (opline->opcode == ZEND_POST_DEC) { SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_LONG, 0); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_LONG_MIN); } } exit_point = zend_jit_trace_get_exit_point(opline + 1, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| jo &exit_addr dasm_put(Dst, 2176, (ptrdiff_t)(exit_addr)); #line 4116 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_PRE_DEC) && opline->result_type != IS_UNUSED) { //| ZVAL_COPY_VALUE res_addr, res_use_info, op1_def_addr, MAY_BE_LONG, ZREG_R0, ZREG_R1 if (MAY_BE_LONG & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_def_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_def_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_def_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_def_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_def_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_def_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_def_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(op1_def_addr))); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else if (Z_MODE(op1_def_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(op1_def_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_def_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_def_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R1), (ZREG_R1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { dasm_put(Dst, 1658, (ZREG_R1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_def_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_def_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R1), Z_LVAL_P(Z_ZV(op1_def_addr))); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else if (Z_MODE(op1_def_addr) == IS_REG) { if (ZREG_R1 != Z_REG(op1_def_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_def_addr)), (ZREG_R1)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R1), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_def_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(op1_def_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_def_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_def_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_def_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_def_addr)) { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_def_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_def_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_def_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } } else if (Z_MODE(op1_def_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_def_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_def_addr)) { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_def_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_def_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_def_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } } else if (Z_MODE(op1_def_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(MAY_BE_LONG & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((MAY_BE_LONG & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(MAY_BE_LONG & MAY_BE_GUARD) && has_concrete_type(MAY_BE_LONG & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(MAY_BE_LONG); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 4120 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var), old_op1_info); if (opline->result_type != IS_UNUSED) { SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_res_info); } } else if (may_overflow) { //| jo >1 dasm_put(Dst, 2180); #line 4128 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_PRE_DEC) && opline->result_type != IS_UNUSED) { //| ZVAL_COPY_VALUE res_addr, res_use_info, op1_def_addr, MAY_BE_LONG, ZREG_R0, ZREG_R1 if (MAY_BE_LONG & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_def_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_def_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_def_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_def_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_def_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_def_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_def_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(op1_def_addr))); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else if (Z_MODE(op1_def_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(op1_def_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_def_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_def_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R1), (ZREG_R1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { dasm_put(Dst, 1658, (ZREG_R1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_def_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_def_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R1), Z_LVAL_P(Z_ZV(op1_def_addr))); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else if (Z_MODE(op1_def_addr) == IS_REG) { if (ZREG_R1 != Z_REG(op1_def_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_def_addr)), (ZREG_R1)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R1), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_def_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(op1_def_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_def_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_def_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_def_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_def_addr)) { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_def_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_def_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_def_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } } else if (Z_MODE(op1_def_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_def_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_def_addr)) { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_def_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_def_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_def_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } } else if (Z_MODE(op1_def_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(MAY_BE_LONG & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((MAY_BE_LONG & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(MAY_BE_LONG & MAY_BE_GUARD) && has_concrete_type(MAY_BE_LONG & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(MAY_BE_LONG); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 4131 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.cold_code dasm_put(Dst, 289); #line 4133 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 4134 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_POST_INC) { //|.if X64 //| mov64 rax, 0x43e0000000000000 //| SET_ZVAL_LVAL op1_def_addr, rax dasm_put(Dst, 54, (unsigned int)(0x43e0000000000000), (unsigned int)((0x43e0000000000000)>>32)); if (Z_MODE(op1_def_addr) == IS_REG) { dasm_put(Dst, 2185, (Z_REG(op1_def_addr))); } else { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } #line 4138 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| SET_ZVAL_LVAL op1_def_addr, 0 //| SET_ZVAL_W2 op1_def_addr, 0x41e00000 //|.endif } else { //|.if X64 //| mov64 rax, 0xc3e0000000000000 //| SET_ZVAL_LVAL op1_def_addr, rax dasm_put(Dst, 54, (unsigned int)(0xc3e0000000000000), (unsigned int)((0xc3e0000000000000)>>32)); if (Z_MODE(op1_def_addr) == IS_REG) { dasm_put(Dst, 2185, (Z_REG(op1_def_addr))); } else { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } #line 4146 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| SET_ZVAL_LVAL op1_def_addr, 0x00200000 //| SET_ZVAL_W2 op1_def_addr, 0xc1e00000 //|.endif } if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { //| SET_ZVAL_TYPE_INFO op1_def_addr, IS_DOUBLE ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); #line 4153 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if ((opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_PRE_DEC) && opline->result_type != IS_UNUSED) { //| ZVAL_COPY_VALUE res_addr, res_use_info, op1_def_addr, MAY_BE_DOUBLE, ZREG_R0, ZREG_R1 if (MAY_BE_DOUBLE & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((MAY_BE_DOUBLE & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_def_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_def_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_def_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_def_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_def_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_def_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_def_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(op1_def_addr))); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else if (Z_MODE(op1_def_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(op1_def_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_def_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_def_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R1), (ZREG_R1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { dasm_put(Dst, 1658, (ZREG_R1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_def_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_def_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R1), Z_LVAL_P(Z_ZV(op1_def_addr))); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else if (Z_MODE(op1_def_addr) == IS_REG) { if (ZREG_R1 != Z_REG(op1_def_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_def_addr)), (ZREG_R1)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R1), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((MAY_BE_DOUBLE & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_def_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(op1_def_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_def_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_def_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_def_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_def_addr)) { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_def_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_def_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_def_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } } else if (Z_MODE(op1_def_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_def_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_def_addr)) { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_def_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_def_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_def_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } } else if (Z_MODE(op1_def_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(MAY_BE_DOUBLE & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((MAY_BE_DOUBLE & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(MAY_BE_DOUBLE & MAY_BE_GUARD) && has_concrete_type(MAY_BE_DOUBLE & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (MAY_BE_DOUBLE & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(MAY_BE_DOUBLE); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 4157 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jmp >3 //|.code dasm_put(Dst, 2199); #line 4160 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if ((opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_PRE_DEC) && opline->result_type != IS_UNUSED) { //| ZVAL_COPY_VALUE res_addr, res_use_info, op1_def_addr, MAY_BE_LONG, ZREG_R0, ZREG_R1 if (MAY_BE_LONG & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_def_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_def_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_def_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_def_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_def_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_def_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_def_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(op1_def_addr))); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else if (Z_MODE(op1_def_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(op1_def_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_def_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_def_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R1), (ZREG_R1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { dasm_put(Dst, 1658, (ZREG_R1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_def_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_def_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R1), Z_LVAL_P(Z_ZV(op1_def_addr))); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else if (Z_MODE(op1_def_addr) == IS_REG) { if (ZREG_R1 != Z_REG(op1_def_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_def_addr)), (ZREG_R1)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R1), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_def_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(op1_def_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_def_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_def_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_def_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_def_addr)) { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_def_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_def_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_def_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } } else if (Z_MODE(op1_def_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_def_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_def_addr)) { if (Z_MODE(op1_def_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_def_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_def_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_def_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } } else if (Z_MODE(op1_def_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(MAY_BE_LONG & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((MAY_BE_LONG & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(MAY_BE_LONG & MAY_BE_GUARD) && has_concrete_type(MAY_BE_LONG & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(MAY_BE_LONG); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 4164 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_LONG)) { //|.cold_code dasm_put(Dst, 289); #line 4168 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 4169 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE))) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 4171 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_UNDEF) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_UNDEF, >2 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 4173 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(CV_DEF_OF(EX_VAR_TO_NUM(opline->op1.var)))); //| mov FCARG1d, opline->op1.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 2205, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF, opline->op1.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 4176 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO op1_addr, IS_NULL ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_NULL); #line 4177 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_info |= MAY_BE_NULL; } //|2: //| LOAD_ZVAL_ADDR FCARG1a, op1_addr dasm_put(Dst, 1944); if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 4181 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // ZVAL_DEREF(var_ptr); if (op1_info & MAY_BE_REF) { //| IF_NOT_Z_TYPE, FCARG1a, IS_REFERENCE, >2 //| GET_Z_PTR FCARG1a, FCARG1a //| cmp aword [FCARG1a + offsetof(zend_reference, sources.ptr)], 0 //| jz >1 dasm_put(Dst, 2234, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, sources.ptr)); #line 4188 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (RETURN_VALUE_USED(opline)) { //| LOAD_ZVAL_ADDR FCARG2a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2255, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2263, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 4190 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| xor FCARG2a, FCARG2a dasm_put(Dst, 2269); #line 4192 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode == ZEND_PRE_INC) { //| EXT_CALL zend_jit_pre_inc_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_pre_inc_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_pre_inc_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_pre_inc_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_pre_inc_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_pre_inc_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_pre_inc_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 4195 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opline->opcode == ZEND_PRE_DEC) { //| EXT_CALL zend_jit_pre_dec_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_pre_dec_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_pre_dec_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_pre_dec_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_pre_dec_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_pre_dec_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_pre_dec_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 4197 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opline->opcode == ZEND_POST_INC) { //| EXT_CALL zend_jit_post_inc_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_post_inc_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_post_inc_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_post_inc_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_post_inc_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_post_inc_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_post_inc_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 4199 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opline->opcode == ZEND_POST_DEC) { //| EXT_CALL zend_jit_post_dec_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_post_dec_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_post_dec_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_post_dec_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_post_dec_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_post_dec_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_post_dec_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 4201 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } zend_jit_check_exception(Dst); //| jmp >3 //|1: //| lea FCARG1a, [FCARG1a + offsetof(zend_reference, val)] //|2: dasm_put(Dst, 2274, offsetof(zend_reference, val)); #line 4209 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode == ZEND_POST_INC || opline->opcode == ZEND_POST_DEC) { zend_jit_addr val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); //| ZVAL_COPY_VALUE res_addr, res_use_info, val_addr, op1_info, ZREG_R0, ZREG_R2 if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(val_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(val_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (ZREG_R2 != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(val_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(val_addr) != IS_REG || Z_REG(res_addr) != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(val_addr) != IS_REG || ZREG_XMM0 != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 4215 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| TRY_ADDREF op1_info, ah, r2 if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (op1_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 2287); } dasm_put(Dst, 2112); } #line 4216 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_POST_INC) { if (opline->opcode == ZEND_PRE_INC && opline->result_type != IS_UNUSED) { //| LOAD_ZVAL_ADDR FCARG2a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2255, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2263, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 4220 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_pre_inc, r0 if (MAY_USE_32BIT_ADDR(zend_jit_pre_inc)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_pre_inc)); } else { if (IS_SIGNED_32BIT(zend_jit_pre_inc)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_pre_inc)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_pre_inc)), (unsigned int)((((ptrdiff_t)zend_jit_pre_inc))>>32)); } dasm_put(Dst, 59); } #line 4221 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL increment_function, r0 if (MAY_USE_32BIT_ADDR(increment_function)) { dasm_put(Dst, 46, (ptrdiff_t)(increment_function)); } else { if (IS_SIGNED_32BIT(increment_function)) { dasm_put(Dst, 49, ((ptrdiff_t)increment_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)increment_function)), (unsigned int)((((ptrdiff_t)increment_function))>>32)); } dasm_put(Dst, 59); } #line 4223 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (opline->opcode == ZEND_PRE_DEC && opline->result_type != IS_UNUSED) { //| LOAD_ZVAL_ADDR FCARG2a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2255, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2263, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 4227 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_pre_dec, r0 if (MAY_USE_32BIT_ADDR(zend_jit_pre_dec)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_pre_dec)); } else { if (IS_SIGNED_32BIT(zend_jit_pre_dec)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_pre_dec)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_pre_dec)), (unsigned int)((((ptrdiff_t)zend_jit_pre_dec))>>32)); } dasm_put(Dst, 59); } #line 4228 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL decrement_function, r0 if (MAY_USE_32BIT_ADDR(decrement_function)) { dasm_put(Dst, 46, (ptrdiff_t)(decrement_function)); } else { if (IS_SIGNED_32BIT(decrement_function)) { dasm_put(Dst, 49, ((ptrdiff_t)decrement_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)decrement_function)), (unsigned int)((((ptrdiff_t)decrement_function))>>32)); } dasm_put(Dst, 59); } #line 4230 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (may_throw) { zend_jit_check_exception(Dst); } } else { zend_reg tmp_reg; if (opline->opcode == ZEND_POST_INC || opline->opcode == ZEND_POST_DEC) { //| ZVAL_COPY_VALUE res_addr, res_use_info, op1_addr, MAY_BE_DOUBLE, ZREG_R0, ZREG_R2 if (MAY_BE_DOUBLE & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((MAY_BE_DOUBLE & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R2 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((MAY_BE_DOUBLE & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(op1_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(MAY_BE_DOUBLE & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((MAY_BE_DOUBLE & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(MAY_BE_DOUBLE & MAY_BE_GUARD) && has_concrete_type(MAY_BE_DOUBLE & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (MAY_BE_DOUBLE & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(MAY_BE_DOUBLE); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 4240 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_MODE(op1_def_addr) == IS_REG) { tmp_reg = Z_REG(op1_def_addr); } else if (Z_MODE(op1_addr) == IS_REG && Z_LAST_USE(op1_addr)) { tmp_reg = Z_REG(op1_addr); } else { tmp_reg = ZREG_XMM0; } //| DOUBLE_GET_ZVAL_DVAL tmp_reg, op1_addr if (Z_MODE(op1_addr) != IS_REG || tmp_reg != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (tmp_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (tmp_reg-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (tmp_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (tmp_reg-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } #line 4249 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_POST_INC) { if (CAN_USE_AVX()) { //| vaddsd xmm(tmp_reg-ZREG_XMM0), xmm(tmp_reg-ZREG_XMM0), qword [->one] dasm_put(Dst, 2294, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); #line 4252 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| addsd xmm(tmp_reg-ZREG_XMM0), qword [->one] dasm_put(Dst, 2306, (tmp_reg-ZREG_XMM0)); #line 4254 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (CAN_USE_AVX()) { //| vsubsd xmm(tmp_reg-ZREG_XMM0), xmm(tmp_reg-ZREG_XMM0), qword [->one] dasm_put(Dst, 2317, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); #line 4258 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| subsd xmm(tmp_reg-ZREG_XMM0), qword [->one] dasm_put(Dst, 2329, (tmp_reg-ZREG_XMM0)); #line 4260 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| DOUBLE_SET_ZVAL_DVAL op1_def_addr, tmp_reg if (Z_MODE(op1_def_addr) == IS_REG) { if (tmp_reg != Z_REG(op1_def_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(op1_def_addr)-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(op1_def_addr)-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (tmp_reg-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } else { dasm_put(Dst, 1844, (tmp_reg-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); } } #line 4263 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_PRE_DEC) && opline->result_type != IS_UNUSED) { //| ZVAL_COPY_VALUE res_addr, res_use_info, op1_addr, op1_def_info, ZREG_R0, ZREG_R1 if (op1_def_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_def_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R1), (ZREG_R1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R1)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R1), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((op1_def_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(op1_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(op1_def_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((op1_def_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_def_info & MAY_BE_GUARD) && has_concrete_type(op1_def_info & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_def_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_def_info); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 4266 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| TRY_ADDREF op1_def_info, ah, r1 if (op1_def_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (op1_def_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 2287); } dasm_put(Dst, 2078); } #line 4267 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| jmp >3 //|.code dasm_put(Dst, 2199); #line 4271 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|3: dasm_put(Dst, 346); #line 4273 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_store_var_if_necessary_ex(Dst, opline->op1.var, op1_def_addr, op1_def_info, op1_addr, op1_info)) { return 0; } if (opline->result_type != IS_UNUSED) { if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, res_info)) { return 0; } } return 1; } static int zend_jit_opline_uses_reg(const zend_op *opline, int8_t reg) { if ((opline+1)->opcode == ZEND_OP_DATA && ((opline+1)->op1_type & (IS_VAR|IS_TMP_VAR|IS_CV)) && JIT_G(current_frame)->stack[EX_VAR_TO_NUM((opline+1)->op1.var)].reg == reg) { return 1; } return ((opline->result_type & (IS_VAR|IS_TMP_VAR|IS_CV)) && JIT_G(current_frame)->stack[EX_VAR_TO_NUM(opline->result.var)].reg == reg) || ((opline->op1_type & (IS_VAR|IS_TMP_VAR|IS_CV)) && JIT_G(current_frame)->stack[EX_VAR_TO_NUM(opline->op1.var)].reg == reg) || ((opline->op2_type & (IS_VAR|IS_TMP_VAR|IS_CV)) && JIT_G(current_frame)->stack[EX_VAR_TO_NUM(opline->op2.var)].reg == reg); } static int zend_jit_math_long_long(dasm_State **Dst, const zend_op *opline, zend_uchar opcode, zend_jit_addr op1_addr, zend_jit_addr op2_addr, zend_jit_addr res_addr, uint32_t res_info, uint32_t res_use_info, int may_overflow) { bool must_set_cflags = 0; bool same_ops = zend_jit_same_addr(op1_addr, op2_addr); zend_reg result_reg; zend_reg tmp_reg = ZREG_R0; if (Z_MODE(res_addr) == IS_REG && (res_info & MAY_BE_LONG)) { if (may_overflow && (res_info & MAY_BE_GUARD) && JIT_G(current_frame) && zend_jit_opline_uses_reg(opline, Z_REG(res_addr))) { result_reg = ZREG_R0; } else { result_reg = Z_REG(res_addr); } } else if (Z_MODE(op1_addr) == IS_REG && Z_LAST_USE(op1_addr) && !may_overflow) { result_reg = Z_REG(op1_addr); } else if (Z_REG(res_addr) != ZREG_R0) { result_reg = ZREG_R0; } else { /* ASSIGN_DIM_OP */ result_reg = ZREG_FCARG1; tmp_reg = ZREG_FCARG1; } if (may_overflow) { must_set_cflags = 1; } else { const zend_op *next_opline = opline + 1; if (next_opline->opcode == ZEND_IS_EQUAL || next_opline->opcode == ZEND_IS_NOT_EQUAL || next_opline->opcode == ZEND_IS_SMALLER || next_opline->opcode == ZEND_IS_SMALLER_OR_EQUAL || next_opline->opcode == ZEND_CASE || next_opline->opcode == ZEND_IS_IDENTICAL || next_opline->opcode == ZEND_IS_NOT_IDENTICAL || next_opline->opcode == ZEND_CASE_STRICT) { if (next_opline->op1_type == IS_CONST && Z_TYPE_P(RT_CONSTANT(next_opline, next_opline->op1)) == IS_LONG && Z_LVAL_P(RT_CONSTANT(next_opline, next_opline->op1)) == 0 && next_opline->op2_type == opline->result_type && next_opline->op2.var == opline->result.var) { must_set_cflags = 1; } else if (next_opline->op2_type == IS_CONST && Z_TYPE_P(RT_CONSTANT(next_opline, next_opline->op2)) == IS_LONG && Z_LVAL_P(RT_CONSTANT(next_opline, next_opline->op2)) == 0 && next_opline->op2_type == opline->result_type && next_opline->op2.var == opline->result.var) { must_set_cflags = 1; } } } if (opcode == ZEND_MUL && Z_MODE(op2_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op2_addr)) == 2) { if (Z_MODE(op1_addr) == IS_REG && !must_set_cflags) { //| lea Ra(result_reg), [Ra(Z_REG(op1_addr))+Ra(Z_REG(op1_addr))] dasm_put(Dst, 2340, (result_reg), (Z_REG(op1_addr)), (Z_REG(op1_addr)), 0); #line 4367 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| GET_ZVAL_LVAL result_reg, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (result_reg), (result_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (result_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (result_reg), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (result_reg != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (result_reg)); } } else { ZEND_UNREACHABLE(); } #line 4369 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| add Ra(result_reg), Ra(result_reg) dasm_put(Dst, 2353, (result_reg), (result_reg)); #line 4370 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (opcode == ZEND_MUL && Z_MODE(op2_addr) == IS_CONST_ZVAL && !must_set_cflags && Z_LVAL_P(Z_ZV(op2_addr)) > 0 && zend_long_is_power_of_two(Z_LVAL_P(Z_ZV(op2_addr)))) { //| GET_ZVAL_LVAL result_reg, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (result_reg), (result_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (result_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (result_reg), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (result_reg != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (result_reg)); } } else { ZEND_UNREACHABLE(); } #line 4377 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| shl Ra(result_reg), zend_long_floor_log2(Z_LVAL_P(Z_ZV(op2_addr))) dasm_put(Dst, 2361, (result_reg), zend_long_floor_log2(Z_LVAL_P(Z_ZV(op2_addr)))); #line 4378 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opcode == ZEND_MUL && Z_MODE(op1_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op1_addr)) == 2) { if (Z_MODE(op2_addr) == IS_REG && !must_set_cflags) { //| lea Ra(result_reg), [Ra(Z_REG(op2_addr))+Ra(Z_REG(op2_addr))] dasm_put(Dst, 2340, (result_reg), (Z_REG(op2_addr)), (Z_REG(op2_addr)), 0); #line 4383 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| GET_ZVAL_LVAL result_reg, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (result_reg), (result_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (result_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (result_reg != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (result_reg)); } } else { ZEND_UNREACHABLE(); } #line 4385 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| add Ra(result_reg), Ra(result_reg) dasm_put(Dst, 2353, (result_reg), (result_reg)); #line 4386 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (opcode == ZEND_MUL && Z_MODE(op1_addr) == IS_CONST_ZVAL && !must_set_cflags && Z_LVAL_P(Z_ZV(op1_addr)) > 0 && zend_long_is_power_of_two(Z_LVAL_P(Z_ZV(op1_addr)))) { //| GET_ZVAL_LVAL result_reg, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (result_reg), (result_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (result_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (result_reg != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (result_reg)); } } else { ZEND_UNREACHABLE(); } #line 4393 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| shl Ra(result_reg), zend_long_floor_log2(Z_LVAL_P(Z_ZV(op1_addr))) dasm_put(Dst, 2361, (result_reg), zend_long_floor_log2(Z_LVAL_P(Z_ZV(op1_addr)))); #line 4394 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opcode == ZEND_DIV && (Z_MODE(op2_addr) == IS_CONST_ZVAL && zend_long_is_power_of_two(Z_LVAL_P(Z_ZV(op2_addr))))) { //| GET_ZVAL_LVAL result_reg, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (result_reg), (result_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (result_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (result_reg), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (result_reg != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (result_reg)); } } else { ZEND_UNREACHABLE(); } #line 4398 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| shr Ra(result_reg), zend_long_floor_log2(Z_LVAL_P(Z_ZV(op2_addr))) dasm_put(Dst, 2368, (result_reg), zend_long_floor_log2(Z_LVAL_P(Z_ZV(op2_addr)))); #line 4399 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opcode == ZEND_ADD && !must_set_cflags && Z_MODE(op1_addr) == IS_REG && Z_MODE(op2_addr) == IS_CONST_ZVAL && IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { //| lea Ra(result_reg), [Ra(Z_REG(op1_addr))+Z_LVAL_P(Z_ZV(op2_addr))] dasm_put(Dst, 2375, (result_reg), (Z_REG(op1_addr)), Z_LVAL_P(Z_ZV(op2_addr))); #line 4405 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opcode == ZEND_ADD && !must_set_cflags && Z_MODE(op2_addr) == IS_REG && Z_MODE(op1_addr) == IS_CONST_ZVAL && IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { //| lea Ra(result_reg), [Ra(Z_REG(op2_addr))+Z_LVAL_P(Z_ZV(op1_addr))] dasm_put(Dst, 2375, (result_reg), (Z_REG(op2_addr)), Z_LVAL_P(Z_ZV(op1_addr))); #line 4411 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opcode == ZEND_SUB && !must_set_cflags && Z_MODE(op1_addr) == IS_REG && Z_MODE(op2_addr) == IS_CONST_ZVAL && IS_SIGNED_32BIT(-Z_LVAL_P(Z_ZV(op2_addr)))) { //| lea Ra(result_reg), [Ra(Z_REG(op1_addr))-Z_LVAL_P(Z_ZV(op2_addr))] dasm_put(Dst, 2375, (result_reg), (Z_REG(op1_addr)), -Z_LVAL_P(Z_ZV(op2_addr))); #line 4417 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| GET_ZVAL_LVAL result_reg, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (result_reg), (result_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (result_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (result_reg), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (result_reg != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (result_reg)); } } else { ZEND_UNREACHABLE(); } #line 4419 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((opcode == ZEND_ADD || opcode == ZEND_SUB) && Z_MODE(op2_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op2_addr)) == 0) { /* +/- 0 */ may_overflow = 0; } else if (same_ops && opcode != ZEND_DIV) { //| LONG_MATH_REG opcode, Ra(result_reg), Ra(result_reg) switch (opcode) { case ZEND_ADD: dasm_put(Dst, 2353, (result_reg), (result_reg)); break; case ZEND_SUB: dasm_put(Dst, 2385, (result_reg), (result_reg)); break; case ZEND_MUL: dasm_put(Dst, 2393, (result_reg), (result_reg)); break; case ZEND_BW_OR: dasm_put(Dst, 2402, (result_reg), (result_reg)); break; case ZEND_BW_AND: dasm_put(Dst, 2410, (result_reg), (result_reg)); break; case ZEND_BW_XOR: dasm_put(Dst, 1650, (result_reg), (result_reg)); break; default: ZEND_UNREACHABLE(); } #line 4426 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { zend_reg tmp_reg; if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_R0) { tmp_reg = ZREG_R1; } else if (result_reg != ZREG_R0) { tmp_reg = ZREG_R0; } else { tmp_reg = ZREG_R1; } //| LONG_MATH opcode, result_reg, op2_addr, tmp_reg switch (opcode) { case ZEND_ADD: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 2418, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2153, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2432, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2353, (Z_REG(op2_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 2442, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2169, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2456, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2385, (Z_REG(op2_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 2466, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (result_reg), (tmp_reg)); } else { dasm_put(Dst, 2481, (result_reg), (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2490, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2393, (result_reg), (Z_REG(op2_addr))); } else { ZEND_UNREACHABLE(); } break; case ZEND_BW_OR: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 2501, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2515, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2522, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2402, (Z_REG(op2_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; case ZEND_BW_AND: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 2532, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2546, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2553, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2410, (Z_REG(op2_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; case ZEND_BW_XOR: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 2563, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2577, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2585, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 1650, (Z_REG(op2_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; default: ZEND_UNREACHABLE(); } #line 4437 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" (void)tmp_reg; } } if (may_overflow) { if (res_info & MAY_BE_GUARD) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } if ((res_info & MAY_BE_ANY) == MAY_BE_LONG) { //| jo &exit_addr dasm_put(Dst, 2176, (ptrdiff_t)(exit_addr)); #line 4449 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(res_addr) == IS_REG && result_reg != Z_REG(res_addr)) { //| mov Ra(Z_REG(res_addr)), Ra(result_reg) dasm_put(Dst, 1682, (result_reg), (Z_REG(res_addr))); #line 4451 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if ((res_info & MAY_BE_ANY) == MAY_BE_DOUBLE) { //| jno &exit_addr dasm_put(Dst, 2595, (ptrdiff_t)(exit_addr)); #line 4454 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } } else { if (res_info & MAY_BE_LONG) { //| jo >1 dasm_put(Dst, 2180); #line 4460 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jno >1 dasm_put(Dst, 2599); #line 4462 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } if (Z_MODE(res_addr) == IS_MEM_ZVAL && (res_info & MAY_BE_LONG)) { //| SET_ZVAL_LVAL res_addr, Ra(result_reg) if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (result_reg), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (result_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } #line 4468 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(op1_addr) != IS_MEM_ZVAL || Z_REG(op1_addr) != Z_REG(res_addr) || Z_OFFSET(op1_addr) != Z_OFFSET(res_addr)) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF|MAY_BE_GUARD)) != MAY_BE_LONG) { //| SET_ZVAL_TYPE_INFO res_addr, IS_LONG ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); #line 4471 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } if (may_overflow && (!(res_info & MAY_BE_GUARD) || (res_info & MAY_BE_ANY) == MAY_BE_DOUBLE)) { zend_reg tmp_reg1 = ZREG_XMM0; zend_reg tmp_reg2 = ZREG_XMM1; if (res_info & MAY_BE_LONG) { //|.cold_code dasm_put(Dst, 289); #line 4481 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 4482 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } do { if ((sizeof(void*) == 8 || Z_MODE(res_addr) != IS_REG) && ((Z_MODE(op1_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op1_addr)) == 1) || (Z_MODE(op2_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op2_addr)) == 1))) { if (opcode == ZEND_ADD) { //|.if X64 //| mov64 Ra(tmp_reg), 0x43e0000000000000 dasm_put(Dst, 1658, (tmp_reg), (unsigned int)(0x43e0000000000000), (unsigned int)((0x43e0000000000000)>>32)); #line 4491 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(res_addr) == IS_REG) { //| movd xmm(Z_REG(res_addr)-ZREG_XMM0), Ra(tmp_reg) dasm_put(Dst, 2604, (Z_REG(res_addr)-ZREG_XMM0), (tmp_reg)); #line 4493 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SET_ZVAL_LVAL res_addr, Ra(tmp_reg) if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (tmp_reg), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } #line 4495 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.else //| SET_ZVAL_LVAL res_addr, 0 //| SET_ZVAL_W2 res_addr, 0x41e00000 //|.endif break; } else if (opcode == ZEND_SUB) { //|.if X64 //| mov64 Ra(tmp_reg), 0xc3e0000000000000 dasm_put(Dst, 1658, (tmp_reg), (unsigned int)(0xc3e0000000000000), (unsigned int)((0xc3e0000000000000)>>32)); #line 4504 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(res_addr) == IS_REG) { //| movd xmm(Z_REG(res_addr)-ZREG_XMM0), Ra(tmp_reg) dasm_put(Dst, 2604, (Z_REG(res_addr)-ZREG_XMM0), (tmp_reg)); #line 4506 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SET_ZVAL_LVAL res_addr, Ra(tmp_reg) if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (tmp_reg), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } #line 4508 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.else //| SET_ZVAL_LVAL res_addr, 0x00200000 //| SET_ZVAL_W2 res_addr, 0xc1e00000 //|.endif break; } } //| DOUBLE_GET_ZVAL_LVAL tmp_reg1, op1_addr, tmp_reg if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (tmp_reg), Z_LVAL_P(Z_ZV(op1_addr))); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg)); } else { dasm_put(Dst, 2659, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 2678, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2704, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (Z_REG(op1_addr))); } else { dasm_put(Dst, 2659, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 4518 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| DOUBLE_GET_ZVAL_LVAL tmp_reg2, op2_addr, tmp_reg if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (tmp_reg), Z_LVAL_P(Z_ZV(op2_addr))); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg)); } else { dasm_put(Dst, 2659, (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg)); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 2678, (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2704, (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } } else if (Z_MODE(op2_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (Z_REG(op2_addr))); } else { dasm_put(Dst, 2659, (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 4519 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (CAN_USE_AVX()) { //| AVX_MATH_REG opcode, tmp_reg1, tmp_reg1, tmp_reg2 switch (opcode) { case ZEND_ADD: dasm_put(Dst, 2725, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); break; case ZEND_SUB: dasm_put(Dst, 2737, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); break; case ZEND_MUL: dasm_put(Dst, 2749, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); break; case ZEND_DIV: dasm_put(Dst, 2761, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); break; } #line 4521 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SSE_MATH_REG opcode, tmp_reg1, tmp_reg2 switch (opcode) { case ZEND_ADD: dasm_put(Dst, 2773, (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); break; case ZEND_SUB: dasm_put(Dst, 2784, (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); break; case ZEND_MUL: dasm_put(Dst, 2795, (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); break; case ZEND_DIV: dasm_put(Dst, 2806, (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); break; } #line 4523 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| DOUBLE_SET_ZVAL_DVAL res_addr, tmp_reg1 if (Z_MODE(res_addr) == IS_REG) { if (tmp_reg1 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (tmp_reg1-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (tmp_reg1-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (tmp_reg1-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (tmp_reg1-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } #line 4525 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } while (0); if (Z_MODE(res_addr) == IS_MEM_ZVAL && (res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF|MAY_BE_GUARD)) != MAY_BE_DOUBLE) { //| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); #line 4530 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (res_info & MAY_BE_LONG) { //| jmp >2 //|.code dasm_put(Dst, 2817); #line 4534 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|2: dasm_put(Dst, 1944); #line 4536 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_math_long_double(dasm_State **Dst, zend_uchar opcode, zend_jit_addr op1_addr, zend_jit_addr op2_addr, zend_jit_addr res_addr, uint32_t res_use_info) { zend_reg result_reg = (Z_MODE(res_addr) == IS_REG) ? Z_REG(res_addr) : ZREG_XMM0; zend_reg tmp_reg; if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_R0) { /* ASSIGN_DIM_OP */ tmp_reg = ZREG_R1; } else { tmp_reg = ZREG_R0; } //| DOUBLE_GET_ZVAL_LVAL result_reg, op1_addr, tmp_reg if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (tmp_reg), Z_LVAL_P(Z_ZV(op1_addr))); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (tmp_reg)); } else { dasm_put(Dst, 2659, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (tmp_reg)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 2678, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2704, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr))); } else { dasm_put(Dst, 2659, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 4560 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_R0) { /* ASSIGN_DIM_OP */ if (CAN_USE_AVX()) { //| AVX_MATH opcode, result_reg, result_reg, op2_addr, r1 switch (opcode) { case ZEND_ADD: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 2823, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 2835, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2849, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2725, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 2863, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 2875, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2889, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2737, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 2903, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 2915, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2929, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2749, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_DIV: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 2943, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 2955, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2969, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2761, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; } #line 4565 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SSE_MATH opcode, result_reg, op2_addr, r1 switch (opcode) { case ZEND_ADD: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 2983, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 2994, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3007, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2773, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 3020, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 3031, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3044, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2784, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 3057, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 3068, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3081, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2795, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_DIV: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 3094, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 3105, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3118, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2806, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; } #line 4567 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (CAN_USE_AVX()) { //| AVX_MATH opcode, result_reg, result_reg, op2_addr, r0 switch (opcode) { case ZEND_ADD: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 2823, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 3131, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2849, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2725, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 2863, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 3145, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2889, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2737, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 2903, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 3159, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2929, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2749, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_DIV: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 2943, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 3173, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2969, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2761, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; } #line 4571 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SSE_MATH opcode, result_reg, op2_addr, r0 switch (opcode) { case ZEND_ADD: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 2983, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 3187, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3007, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2773, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 3020, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 3200, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3044, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2784, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 3057, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 3213, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3081, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2795, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_DIV: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 3094, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 3226, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3118, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2806, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; } #line 4573 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| DOUBLE_SET_ZVAL_DVAL res_addr, result_reg if (Z_MODE(res_addr) == IS_REG) { if (result_reg != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (result_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (result_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (result_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } #line 4576 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF|MAY_BE_GUARD)) != MAY_BE_DOUBLE) { //| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); #line 4580 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } return 1; } static int zend_jit_math_double_long(dasm_State **Dst, zend_uchar opcode, zend_jit_addr op1_addr, zend_jit_addr op2_addr, zend_jit_addr res_addr, uint32_t res_use_info) { zend_reg result_reg, tmp_reg_gp; if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_R0) { /* ASSIGN_DIM_OP */ tmp_reg_gp = ZREG_R1; } else { tmp_reg_gp = ZREG_R0; } if (zend_is_commutative(opcode) && (Z_MODE(res_addr) != IS_REG || Z_MODE(op1_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_addr))) { if (Z_MODE(res_addr) == IS_REG) { result_reg = Z_REG(res_addr); } else { result_reg = ZREG_XMM0; } //| DOUBLE_GET_ZVAL_LVAL result_reg, op2_addr, tmp_reg_gp if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (tmp_reg_gp), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (tmp_reg_gp), Z_LVAL_P(Z_ZV(op2_addr))); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (tmp_reg_gp)); } else { dasm_put(Dst, 2659, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (tmp_reg_gp)); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 2678, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2704, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } } else if (Z_MODE(op2_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr))); } else { dasm_put(Dst, 2659, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 4610 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_R0) { /* ASSIGN_DIM_OP */ if (CAN_USE_AVX()) { //| AVX_MATH opcode, result_reg, result_reg, op1_addr, r1 switch (opcode) { case ZEND_ADD: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 2823, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 2835, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2849, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2725, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 2863, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 2875, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2889, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2737, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 2903, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 2915, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2929, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2749, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_DIV: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 2943, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 2955, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2969, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2761, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; } #line 4614 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SSE_MATH opcode, result_reg, op1_addr, r1 switch (opcode) { case ZEND_ADD: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 2983, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 2994, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3007, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2773, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 3020, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 3031, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3044, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2784, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 3057, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 3068, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3081, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2795, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_DIV: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 3094, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 3105, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3118, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2806, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; } #line 4616 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (CAN_USE_AVX()) { //| AVX_MATH opcode, result_reg, result_reg, op1_addr, r0 switch (opcode) { case ZEND_ADD: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 2823, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 3131, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2849, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2725, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 2863, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 3145, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2889, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2737, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 2903, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 3159, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2929, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2749, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_DIV: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 2943, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 3173, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2969, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2761, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; } #line 4620 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SSE_MATH opcode, result_reg, op1_addr, r0 switch (opcode) { case ZEND_ADD: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 2983, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 3187, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3007, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2773, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 3020, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 3200, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3044, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2784, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 3057, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 3213, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3081, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2795, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_DIV: if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 3094, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 3226, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3118, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2806, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; } #line 4622 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else { zend_reg tmp_reg; if (Z_MODE(res_addr) == IS_REG) { result_reg = Z_REG(res_addr); tmp_reg = (result_reg == ZREG_XMM0) ? ZREG_XMM1 : ZREG_XMM0; } else if (Z_MODE(op1_addr) == IS_REG && Z_LAST_USE(op1_addr)) { result_reg = Z_REG(op1_addr); tmp_reg = ZREG_XMM0; } else { result_reg = ZREG_XMM0; tmp_reg = ZREG_XMM1; } if (CAN_USE_AVX()) { zend_reg op1_reg; if (Z_MODE(op1_addr) == IS_REG) { op1_reg = Z_REG(op1_addr); } else { //| DOUBLE_GET_ZVAL_DVAL result_reg, op1_addr if (Z_MODE(op1_addr) != IS_REG || result_reg != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (result_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (result_reg-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } #line 4644 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_reg = result_reg; } if ((opcode == ZEND_ADD || opcode == ZEND_SUB) && Z_MODE(op2_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op2_addr)) == 0) { /* +/- 0 */ } else { //| DOUBLE_GET_ZVAL_LVAL tmp_reg, op2_addr, tmp_reg_gp if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (tmp_reg_gp), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (tmp_reg_gp), Z_LVAL_P(Z_ZV(op2_addr))); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg_gp)); } else { dasm_put(Dst, 2659, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg_gp)); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 2678, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2704, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } } else if (Z_MODE(op2_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr))); } else { dasm_put(Dst, 2659, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 4652 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| AVX_MATH_REG opcode, result_reg, op1_reg, tmp_reg switch (opcode) { case ZEND_ADD: dasm_put(Dst, 2725, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); break; case ZEND_SUB: dasm_put(Dst, 2737, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); break; case ZEND_MUL: dasm_put(Dst, 2749, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); break; case ZEND_DIV: dasm_put(Dst, 2761, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); break; } #line 4653 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| DOUBLE_GET_ZVAL_DVAL result_reg, op1_addr if (Z_MODE(op1_addr) != IS_REG || result_reg != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (result_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (result_reg-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } #line 4656 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((opcode == ZEND_ADD || opcode == ZEND_SUB) && Z_MODE(op2_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op2_addr)) == 0) { /* +/- 0 */ } else { //| DOUBLE_GET_ZVAL_LVAL tmp_reg, op2_addr, tmp_reg_gp if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (tmp_reg_gp), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (tmp_reg_gp), Z_LVAL_P(Z_ZV(op2_addr))); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg_gp)); } else { dasm_put(Dst, 2659, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg_gp)); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 2678, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2704, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } } else if (Z_MODE(op2_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr))); } else { dasm_put(Dst, 2659, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 4662 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SSE_MATH_REG opcode, result_reg, tmp_reg switch (opcode) { case ZEND_ADD: dasm_put(Dst, 2773, (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); break; case ZEND_SUB: dasm_put(Dst, 2784, (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); break; case ZEND_MUL: dasm_put(Dst, 2795, (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); break; case ZEND_DIV: dasm_put(Dst, 2806, (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); break; } #line 4663 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } //| DOUBLE_SET_ZVAL_DVAL res_addr, result_reg if (Z_MODE(res_addr) == IS_REG) { if (result_reg != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (result_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (result_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (result_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } #line 4667 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_MODE(op1_addr) != IS_MEM_ZVAL || Z_REG(op1_addr) != Z_REG(res_addr) || Z_OFFSET(op1_addr) != Z_OFFSET(res_addr)) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF|MAY_BE_GUARD)) != MAY_BE_DOUBLE) { //| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); #line 4672 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } return 1; } static int zend_jit_math_double_double(dasm_State **Dst, zend_uchar opcode, zend_jit_addr op1_addr, zend_jit_addr op2_addr, zend_jit_addr res_addr, uint32_t res_use_info) { bool same_ops = zend_jit_same_addr(op1_addr, op2_addr); zend_reg result_reg; if (Z_MODE(res_addr) == IS_REG) { result_reg = Z_REG(res_addr); } else if (Z_MODE(op1_addr) == IS_REG && Z_LAST_USE(op1_addr)) { result_reg = Z_REG(op1_addr); } else if (zend_is_commutative(opcode) && Z_MODE(op2_addr) == IS_REG && Z_LAST_USE(op2_addr)) { result_reg = Z_REG(op2_addr); } else { result_reg = ZREG_XMM0; } if (CAN_USE_AVX()) { zend_reg op1_reg; zend_jit_addr val_addr; if (Z_MODE(op1_addr) == IS_REG) { op1_reg = Z_REG(op1_addr); val_addr = op2_addr; } else if (Z_MODE(op2_addr) == IS_REG && zend_is_commutative(opcode)) { op1_reg = Z_REG(op2_addr); val_addr = op1_addr; } else { //| DOUBLE_GET_ZVAL_DVAL result_reg, op1_addr if (Z_MODE(op1_addr) != IS_REG || result_reg != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (result_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (result_reg-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } #line 4711 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_reg = result_reg; val_addr = op2_addr; } if ((opcode == ZEND_MUL) && Z_MODE(val_addr) == IS_CONST_ZVAL && Z_DVAL_P(Z_ZV(val_addr)) == 2.0) { //| AVX_MATH_REG ZEND_ADD, result_reg, op1_reg, op1_reg switch (ZEND_ADD) { case ZEND_ADD: dasm_put(Dst, 2725, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (op1_reg-ZREG_XMM0)); break; case ZEND_SUB: dasm_put(Dst, 2737, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (op1_reg-ZREG_XMM0)); break; case ZEND_MUL: dasm_put(Dst, 2749, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (op1_reg-ZREG_XMM0)); break; case ZEND_DIV: dasm_put(Dst, 2761, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (op1_reg-ZREG_XMM0)); break; } #line 4717 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_R0) { /* ASSIGN_DIM_OP */ //| AVX_MATH opcode, result_reg, op1_reg, val_addr, r1 switch (opcode) { case ZEND_ADD: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 2823, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 2835, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2849, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2725, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 2863, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 2875, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2889, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2737, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 2903, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 2915, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2929, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2749, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_DIV: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 2943, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 2955, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2969, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2761, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; } #line 4720 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| AVX_MATH opcode, result_reg, op1_reg, val_addr, r0 switch (opcode) { case ZEND_ADD: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 2823, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 3131, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2849, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2725, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 2863, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 3145, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2889, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2737, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 2903, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 3159, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2929, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2749, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_DIV: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 2943, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 3173, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2969, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2761, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; } #line 4722 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { zend_jit_addr val_addr; if (Z_MODE(op1_addr) != IS_REG && Z_MODE(op2_addr) == IS_REG && zend_is_commutative(opcode)) { //| DOUBLE_GET_ZVAL_DVAL result_reg, op2_addr if (Z_MODE(op2_addr) != IS_REG || result_reg != Z_REG(op2_addr)) { if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 1867, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (result_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (result_reg-ZREG_XMM0)); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 1907, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } } else if (Z_MODE(op2_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } #line 4728 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" val_addr = op1_addr; } else { //| DOUBLE_GET_ZVAL_DVAL result_reg, op1_addr if (Z_MODE(op1_addr) != IS_REG || result_reg != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (result_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (result_reg-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } #line 4731 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" val_addr = op2_addr; } if (same_ops) { //| SSE_MATH_REG opcode, result_reg, result_reg switch (opcode) { case ZEND_ADD: dasm_put(Dst, 2773, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); break; case ZEND_SUB: dasm_put(Dst, 2784, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); break; case ZEND_MUL: dasm_put(Dst, 2795, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); break; case ZEND_DIV: dasm_put(Dst, 2806, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); break; } #line 4735 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if ((opcode == ZEND_MUL) && Z_MODE(val_addr) == IS_CONST_ZVAL && Z_DVAL_P(Z_ZV(val_addr)) == 2.0) { //| SSE_MATH_REG ZEND_ADD, result_reg, result_reg switch (ZEND_ADD) { case ZEND_ADD: dasm_put(Dst, 2773, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); break; case ZEND_SUB: dasm_put(Dst, 2784, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); break; case ZEND_MUL: dasm_put(Dst, 2795, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); break; case ZEND_DIV: dasm_put(Dst, 2806, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); break; } #line 4738 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_R0) { /* ASSIGN_DIM_OP */ //| SSE_MATH opcode, result_reg, val_addr, r1 switch (opcode) { case ZEND_ADD: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 2983, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 2994, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3007, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2773, (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 3020, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 3031, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3044, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2784, (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 3057, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 3068, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3081, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2795, (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_DIV: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 3094, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 3105, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3118, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2806, (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; } #line 4741 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SSE_MATH opcode, result_reg, val_addr, r0 switch (opcode) { case ZEND_ADD: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 2983, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 3187, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3007, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2773, (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 3020, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 3200, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3044, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2784, (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 3057, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 3213, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3081, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2795, (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; case ZEND_DIV: if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 3094, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 3226, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32), (result_reg-ZREG_XMM0)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 3118, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { dasm_put(Dst, 2806, (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { ZEND_UNREACHABLE(); } break; } #line 4743 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| DOUBLE_SET_ZVAL_DVAL res_addr, result_reg if (Z_MODE(res_addr) == IS_REG) { if (result_reg != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (result_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (result_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (result_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (result_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } #line 4746 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_MODE(op1_addr) != IS_MEM_ZVAL || Z_REG(op1_addr) != Z_REG(res_addr) || Z_OFFSET(op1_addr) != Z_OFFSET(res_addr)) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF|MAY_BE_GUARD)) != MAY_BE_DOUBLE) { //| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); #line 4751 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } return 1; } static int zend_jit_math_helper(dasm_State **Dst, const zend_op *opline, zend_uchar opcode, zend_uchar op1_type, znode_op op1, zend_jit_addr op1_addr, uint32_t op1_info, zend_uchar op2_type, znode_op op2, zend_jit_addr op2_addr, uint32_t op2_info, uint32_t res_var, zend_jit_addr res_addr, uint32_t res_info, uint32_t res_use_info, int may_overflow, int may_throw) /* Labels: 1,2,3,4,5,6 */ { bool same_ops = zend_jit_same_addr(op1_addr, op2_addr); if ((op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_LONG) && (res_info & (MAY_BE_LONG|MAY_BE_DOUBLE))) { if (op1_info & (MAY_BE_ANY-MAY_BE_LONG)) { if (op1_info & MAY_BE_DOUBLE) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >3 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3239, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 4783 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >6 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 4785 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!same_ops && (op2_info & (MAY_BE_ANY-MAY_BE_LONG))) { if (op2_info & MAY_BE_DOUBLE) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_LONG, >1 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); #line 4790 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 3265, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 4791 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 4792 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op2_info & (MAY_BE_ANY-(MAY_BE_LONG|MAY_BE_DOUBLE))) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_DOUBLE, >6 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 4794 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!zend_jit_math_long_double(Dst, opcode, op1_addr, op2_addr, res_addr, res_use_info)) { return 0; } //| jmp >5 //|.code dasm_put(Dst, 3279); #line 4800 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op2_addr, IS_LONG, >6 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 4802 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!zend_jit_math_long_long(Dst, opline, opcode, op1_addr, op2_addr, res_addr, res_info, res_use_info, may_overflow)) { return 0; } if (op1_info & MAY_BE_DOUBLE) { //|.cold_code dasm_put(Dst, 289); #line 4809 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|3: dasm_put(Dst, 346); #line 4810 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & (MAY_BE_ANY-(MAY_BE_LONG|MAY_BE_DOUBLE))) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_DOUBLE, >6 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 4812 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op2_info & MAY_BE_DOUBLE) { if (!same_ops && (op2_info & (MAY_BE_ANY-MAY_BE_DOUBLE))) { if (!same_ops) { //| IF_NOT_ZVAL_TYPE, op2_addr, IS_DOUBLE, >1 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 4817 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE, op2_addr, IS_DOUBLE, >6 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 4819 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!zend_jit_math_double_double(Dst, opcode, op1_addr, op2_addr, res_addr, res_use_info)) { return 0; } //| jmp >5 dasm_put(Dst, 3285); #line 4825 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!same_ops) { //|1: dasm_put(Dst, 63); #line 4828 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op2_info & (MAY_BE_ANY-(MAY_BE_LONG|MAY_BE_DOUBLE))) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_LONG, >6 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 4830 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!zend_jit_math_double_long(Dst, opcode, op1_addr, op2_addr, res_addr, res_use_info)) { return 0; } //| jmp >5 dasm_put(Dst, 3285); #line 4835 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code dasm_put(Dst, 386); #line 4837 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if ((op1_info & MAY_BE_DOUBLE) && !(op1_info & MAY_BE_LONG) && (op2_info & (MAY_BE_LONG|MAY_BE_DOUBLE)) && (res_info & MAY_BE_DOUBLE)) { if (op1_info & (MAY_BE_ANY-MAY_BE_DOUBLE)) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_DOUBLE, >6 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 4844 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op2_info & MAY_BE_DOUBLE) { if (!same_ops && (op2_info & (MAY_BE_ANY-MAY_BE_DOUBLE))) { if (!same_ops && (op2_info & MAY_BE_LONG)) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_DOUBLE, >1 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 4849 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op2_addr, IS_DOUBLE, >6 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 4851 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!zend_jit_math_double_double(Dst, opcode, op1_addr, op2_addr, res_addr, res_use_info)) { return 0; } } if (!same_ops && (op2_info & MAY_BE_LONG)) { if (op2_info & MAY_BE_DOUBLE) { //|.cold_code dasm_put(Dst, 289); #line 4860 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|1: dasm_put(Dst, 63); #line 4862 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op2_info & (MAY_BE_ANY-(MAY_BE_DOUBLE|MAY_BE_LONG))) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_LONG, >6 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 4864 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!zend_jit_math_double_long(Dst, opcode, op1_addr, op2_addr, res_addr, res_use_info)) { return 0; } if (op2_info & MAY_BE_DOUBLE) { //| jmp >5 //|.code dasm_put(Dst, 3279); #line 4871 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else if ((op2_info & MAY_BE_DOUBLE) && !(op2_info & MAY_BE_LONG) && (op1_info & (MAY_BE_LONG|MAY_BE_DOUBLE)) && (res_info & MAY_BE_DOUBLE)) { if (op2_info & (MAY_BE_ANY-MAY_BE_DOUBLE)) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_DOUBLE, >6 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 4879 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & MAY_BE_DOUBLE) { if (!same_ops && (op1_info & (MAY_BE_ANY-MAY_BE_DOUBLE))) { if (!same_ops && (op1_info & MAY_BE_LONG)) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_DOUBLE, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 4884 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_DOUBLE, >6 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 4886 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!zend_jit_math_double_double(Dst, opcode, op1_addr, op2_addr, res_addr, res_use_info)) { return 0; } } if (!same_ops && (op1_info & MAY_BE_LONG)) { if (op1_info & MAY_BE_DOUBLE) { //|.cold_code dasm_put(Dst, 289); #line 4895 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|1: dasm_put(Dst, 63); #line 4897 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & (MAY_BE_ANY-(MAY_BE_DOUBLE|MAY_BE_LONG))) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >6 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 4899 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!zend_jit_math_long_double(Dst, opcode, op1_addr, op2_addr, res_addr, res_use_info)) { return 0; } if (op1_info & MAY_BE_DOUBLE) { //| jmp >5 //|.code dasm_put(Dst, 3279); #line 4906 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } //|5: dasm_put(Dst, 498); #line 4911 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE))) || (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE)))) { if ((op1_info & (MAY_BE_LONG|MAY_BE_DOUBLE)) && (op2_info & (MAY_BE_LONG|MAY_BE_DOUBLE)) && (res_info & (MAY_BE_LONG|MAY_BE_DOUBLE))) { //|.cold_code dasm_put(Dst, 289); #line 4918 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|6: dasm_put(Dst, 3290); #line 4920 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(op1_addr) != IS_MEM_ZVAL || Z_REG(op1_addr) != ZREG_FCARG1) { if (Z_MODE(res_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, res_var); //| LOAD_ZVAL_ADDR FCARG1a, real_addr if (Z_MODE(real_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(real_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(real_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(real_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(real_addr)))>>32)); } } else if (Z_MODE(real_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(real_addr)) { dasm_put(Dst, 2220, (Z_REG(real_addr)), Z_OFFSET(real_addr)); } else { dasm_put(Dst, 2228, (Z_REG(real_addr))); } } else { ZEND_UNREACHABLE(); } #line 4924 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_REG(res_addr) != ZREG_FCARG1 || Z_OFFSET(res_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2220, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2228, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 4926 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_MODE(op1_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var); if (!zend_jit_spill_store(Dst, op1_addr, real_addr, op1_info, 1)) { return 0; } op1_addr = real_addr; } //| LOAD_ZVAL_ADDR FCARG2a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2255, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 4935 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (Z_MODE(op1_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var); if (!zend_jit_spill_store(Dst, op1_addr, real_addr, op1_info, 1)) { return 0; } op1_addr = real_addr; } //| LOAD_ZVAL_ADDR FCARG2a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2255, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 4944 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(res_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, res_var); //| LOAD_ZVAL_ADDR FCARG1a, real_addr if (Z_MODE(real_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(real_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(real_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(real_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(real_addr)))>>32)); } } else if (Z_MODE(real_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(real_addr)) { dasm_put(Dst, 2220, (Z_REG(real_addr)), Z_OFFSET(real_addr)); } else { dasm_put(Dst, 2228, (Z_REG(real_addr))); } } else { ZEND_UNREACHABLE(); } #line 4947 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_REG(res_addr) != ZREG_FCARG1 || Z_OFFSET(res_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2220, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2228, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 4949 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (Z_MODE(op2_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var); if (!zend_jit_spill_store(Dst, op2_addr, real_addr, op2_info, 1)) { return 0; } op2_addr = real_addr; } //|.if X64 //| LOAD_ZVAL_ADDR CARG3, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 3303, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 3311, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 4961 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ZVAL_ADDR op2_addr, r0 //|.endif //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 4966 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opcode == ZEND_ADD) { //| EXT_CALL add_function, r0 if (MAY_USE_32BIT_ADDR(add_function)) { dasm_put(Dst, 46, (ptrdiff_t)(add_function)); } else { if (IS_SIGNED_32BIT(add_function)) { dasm_put(Dst, 49, ((ptrdiff_t)add_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)add_function)), (unsigned int)((((ptrdiff_t)add_function))>>32)); } dasm_put(Dst, 59); } #line 4968 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opcode == ZEND_SUB) { //| EXT_CALL sub_function, r0 if (MAY_USE_32BIT_ADDR(sub_function)) { dasm_put(Dst, 46, (ptrdiff_t)(sub_function)); } else { if (IS_SIGNED_32BIT(sub_function)) { dasm_put(Dst, 49, ((ptrdiff_t)sub_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)sub_function)), (unsigned int)((((ptrdiff_t)sub_function))>>32)); } dasm_put(Dst, 59); } #line 4970 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opcode == ZEND_MUL) { //| EXT_CALL mul_function, r0 if (MAY_USE_32BIT_ADDR(mul_function)) { dasm_put(Dst, 46, (ptrdiff_t)(mul_function)); } else { if (IS_SIGNED_32BIT(mul_function)) { dasm_put(Dst, 49, ((ptrdiff_t)mul_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)mul_function)), (unsigned int)((((ptrdiff_t)mul_function))>>32)); } dasm_put(Dst, 59); } #line 4972 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opcode == ZEND_DIV) { //| EXT_CALL div_function, r0 if (MAY_USE_32BIT_ADDR(div_function)) { dasm_put(Dst, 46, (ptrdiff_t)(div_function)); } else { if (IS_SIGNED_32BIT(div_function)) { dasm_put(Dst, 49, ((ptrdiff_t)div_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)div_function)), (unsigned int)((((ptrdiff_t)div_function))>>32)); } dasm_put(Dst, 59); } #line 4974 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } //|.if not(X64) //| add r4, 12 //|.endif //| FREE_OP op1_type, op1, op1_info, 0, NULL if (op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 4981 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| FREE_OP op2_type, op2, op2_info, 0, NULL if (op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 4982 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { if (opline->opcode == ZEND_ASSIGN_DIM_OP && (opline->op2_type & (IS_VAR|IS_TMP_VAR))) { //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.exception)) { dasm_put(Dst, 71, &executor_globals.exception); } else { dasm_put(Dst, 78, (unsigned int)(((ptrdiff_t)&executor_globals.exception)), (unsigned int)((((ptrdiff_t)&executor_globals.exception))>>32)); } #line 4985 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne ->exception_handler_free_op2 dasm_put(Dst, 3317); #line 4986 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RX) { zend_jit_check_exception_undef_result(Dst, opline); } else { zend_jit_check_exception(Dst); } } if (Z_MODE(res_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, res_var); if (!zend_jit_load_reg(Dst, real_addr, res_addr, res_info)) { return 0; } } if ((op1_info & (MAY_BE_LONG|MAY_BE_DOUBLE)) && (op2_info & (MAY_BE_LONG|MAY_BE_DOUBLE)) && (res_info & (MAY_BE_LONG|MAY_BE_DOUBLE))) { //| jmp <5 //|.code dasm_put(Dst, 3322); #line 5003 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } return 1; } static int zend_jit_math(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr, int may_overflow, int may_throw) { ZEND_ASSERT(!(op1_info & MAY_BE_UNDEF) && !(op2_info & MAY_BE_UNDEF)); ZEND_ASSERT((op1_info & (MAY_BE_LONG|MAY_BE_DOUBLE)) && (op2_info & (MAY_BE_LONG|MAY_BE_DOUBLE))); if (!zend_jit_math_helper(Dst, opline, opline->opcode, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, opline->result.var, res_addr, res_info, res_use_info, may_overflow, may_throw)) { return 0; } if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, res_info)) { return 0; } return 1; } static int zend_jit_add_arrays(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, zend_jit_addr res_addr) { if (Z_MODE(op2_addr) != IS_MEM_ZVAL || Z_REG(op2_addr) != ZREG_FCARG1) { //| GET_ZVAL_LVAL ZREG_FCARG1, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } #line 5028 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_LVAL ZREG_FCARG2, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG2), (ZREG_FCARG2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG2), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG2), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (ZREG_FCARG2 != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (ZREG_FCARG2)); } } else { ZEND_UNREACHABLE(); } #line 5029 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_MODE(op1_addr) != IS_MEM_ZVAL || Z_REG(op1_addr) != ZREG_FCARG2) { //| GET_ZVAL_LVAL ZREG_FCARG2, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG2), (ZREG_FCARG2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG2), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG2), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (ZREG_FCARG2 != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (ZREG_FCARG2)); } } else { ZEND_UNREACHABLE(); } #line 5031 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_LVAL ZREG_FCARG1, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } #line 5032 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| GET_ZVAL_LVAL ZREG_R0, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R0), (ZREG_R0)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (ZREG_R0 != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (ZREG_R0)); } } else { ZEND_UNREACHABLE(); } #line 5034 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_LVAL ZREG_FCARG1, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } #line 5035 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG2a, r0 dasm_put(Dst, 3328); #line 5036 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_jit_add_arrays_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_add_arrays_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_add_arrays_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_add_arrays_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_add_arrays_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_add_arrays_helper)), (unsigned int)((((ptrdiff_t)zend_jit_add_arrays_helper))>>32)); } dasm_put(Dst, 59); } #line 5038 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_PTR res_addr, r0 ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 5039 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_ARRAY_EX dasm_put(Dst, 2191, (Z_REG(res_addr)), Z_OFFSET(res_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 5040 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| FREE_OP opline->op1_type, opline->op1, op1_info, 0, opline dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_ARRAY_EX); if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 5041 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 5042 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_long_math_helper(dasm_State **Dst, const zend_op *opline, zend_uchar opcode, zend_uchar op1_type, znode_op op1, zend_jit_addr op1_addr, uint32_t op1_info, zend_ssa_range *op1_range, zend_uchar op2_type, znode_op op2, zend_jit_addr op2_addr, uint32_t op2_info, zend_ssa_range *op2_range, uint32_t res_var, zend_jit_addr res_addr, uint32_t res_info, uint32_t res_use_info, int may_throw) /* Labels: 6 */ { bool same_ops = zend_jit_same_addr(op1_addr, op2_addr); zend_reg result_reg; if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_LONG)) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >6 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 5070 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!same_ops && (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_LONG))) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_LONG, >6 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 5073 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opcode == ZEND_MOD) { result_reg = ZREG_RAX; } else if (Z_MODE(res_addr) == IS_REG) { if ((opline->opcode == ZEND_SL || opline->opcode == ZEND_SR) && opline->op2_type != IS_CONST) { result_reg = ZREG_R0; } else { result_reg = Z_REG(res_addr); } } else if (Z_MODE(op1_addr) == IS_REG && Z_LAST_USE(op1_addr)) { result_reg = Z_REG(op1_addr); } else if (Z_REG(res_addr) != ZREG_R0) { result_reg = ZREG_R0; } else { /* ASSIGN_DIM_OP */ if (ZREG_FCARG1 == ZREG_RCX && (opcode == ZEND_SL || opcode == ZEND_SR) && Z_MODE(op2_addr) != IS_CONST_ZVAL) { result_reg = ZREG_R2; } else { result_reg = ZREG_FCARG1; } } if (opcode == ZEND_SL) { if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { zend_long op2_lval = Z_LVAL_P(Z_ZV(op2_addr)); if (UNEXPECTED((zend_ulong)op2_lval >= SIZEOF_ZEND_LONG * 8)) { if (EXPECTED(op2_lval > 0)) { //| xor Ra(result_reg), Ra(result_reg) dasm_put(Dst, 1650, (result_reg), (result_reg)); #line 5106 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { zend_jit_invalidate_var_if_necessary(Dst, op1_type, op1_addr, op1); zend_jit_invalidate_var_if_necessary(Dst, op2_type, op2_addr, op2); //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 5110 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->negative_shift dasm_put(Dst, 3332); #line 5111 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (Z_MODE(op1_addr) == IS_REG && op2_lval == 1) { //| lea Ra(result_reg), [Ra(Z_REG(op1_addr))+Ra(Z_REG(op1_addr))] dasm_put(Dst, 2340, (result_reg), (Z_REG(op1_addr)), (Z_REG(op1_addr)), 0); #line 5114 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| GET_ZVAL_LVAL result_reg, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (result_reg), (result_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (result_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (result_reg), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (result_reg != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (result_reg)); } } else { ZEND_UNREACHABLE(); } #line 5116 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| shl Ra(result_reg), op2_lval dasm_put(Dst, 2361, (result_reg), op2_lval); #line 5117 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (Z_MODE(op2_addr) != IS_REG || Z_REG(op2_addr) != ZREG_RCX) { //| GET_ZVAL_LVAL ZREG_RCX, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_RCX), (ZREG_RCX)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_RCX), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_RCX), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_RCX), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (ZREG_RCX != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (ZREG_RCX)); } } else { ZEND_UNREACHABLE(); } #line 5121 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!op2_range || op2_range->min < 0 || op2_range->max >= SIZEOF_ZEND_LONG * 8) { //| cmp r1, (SIZEOF_ZEND_LONG*8) //| jae >1 //|.cold_code dasm_put(Dst, 3337, (SIZEOF_ZEND_LONG*8)); #line 5128 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| cmp r1, 0 //| mov Ra(result_reg), 0 //| jg >1 dasm_put(Dst, 3348, (result_reg)); #line 5132 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" zend_jit_invalidate_var_if_necessary(Dst, op1_type, op1_addr, op1); zend_jit_invalidate_var_if_necessary(Dst, op2_type, op2_addr, op2); //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 5135 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->negative_shift //|.code dasm_put(Dst, 3369); #line 5137 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| GET_ZVAL_LVAL result_reg, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (result_reg), (result_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (result_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (result_reg), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (result_reg != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (result_reg)); } } else { ZEND_UNREACHABLE(); } #line 5139 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| shl Ra(result_reg), cl //|1: dasm_put(Dst, 3375, (result_reg)); #line 5141 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (opcode == ZEND_SR) { //| GET_ZVAL_LVAL result_reg, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (result_reg), (result_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (result_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (result_reg), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (result_reg != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (result_reg)); } } else { ZEND_UNREACHABLE(); } #line 5144 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { zend_long op2_lval = Z_LVAL_P(Z_ZV(op2_addr)); if (UNEXPECTED((zend_ulong)op2_lval >= SIZEOF_ZEND_LONG * 8)) { if (EXPECTED(op2_lval > 0)) { //| sar Ra(result_reg), (SIZEOF_ZEND_LONG * 8) - 1 dasm_put(Dst, 3383, (result_reg), (SIZEOF_ZEND_LONG * 8) - 1); #line 5150 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { zend_jit_invalidate_var_if_necessary(Dst, op1_type, op1_addr, op1); zend_jit_invalidate_var_if_necessary(Dst, op2_type, op2_addr, op2); //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 5154 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->negative_shift dasm_put(Dst, 3332); #line 5155 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| sar Ra(result_reg), op2_lval dasm_put(Dst, 3383, (result_reg), op2_lval); #line 5158 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (Z_MODE(op2_addr) != IS_REG || Z_REG(op2_addr) != ZREG_RCX) { //| GET_ZVAL_LVAL ZREG_RCX, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_RCX), (ZREG_RCX)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_RCX), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_RCX), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_RCX), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (ZREG_RCX != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (ZREG_RCX)); } } else { ZEND_UNREACHABLE(); } #line 5162 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!op2_range || op2_range->min < 0 || op2_range->max >= SIZEOF_ZEND_LONG * 8) { //| cmp r1, (SIZEOF_ZEND_LONG*8) //| jae >1 //|.cold_code dasm_put(Dst, 3337, (SIZEOF_ZEND_LONG*8)); #line 5169 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| cmp r1, 0 //| mov r1, (SIZEOF_ZEND_LONG * 8) - 1 //| jg >1 dasm_put(Dst, 3391, (SIZEOF_ZEND_LONG * 8) - 1); #line 5173 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" zend_jit_invalidate_var_if_necessary(Dst, op1_type, op1_addr, op1); zend_jit_invalidate_var_if_necessary(Dst, op2_type, op2_addr, op2); //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 5176 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->negative_shift //|.code dasm_put(Dst, 3369); #line 5178 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|1: //| sar Ra(result_reg), cl dasm_put(Dst, 3407, (result_reg)); #line 5181 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (opcode == ZEND_MOD) { if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { zend_long op2_lval = Z_LVAL_P(Z_ZV(op2_addr)); if (op2_lval == 0) { zend_jit_invalidate_var_if_necessary(Dst, op1_type, op1_addr, op1); zend_jit_invalidate_var_if_necessary(Dst, op2_type, op2_addr, op2); //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 5190 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->mod_by_zero dasm_put(Dst, 3416); #line 5191 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (zend_long_is_power_of_two(op2_lval) && op1_range && op1_range->min >= 0) { zval tmp; zend_jit_addr tmp_addr; zend_reg tmp_reg; /* Optimisation for mod of power of 2 */ ZVAL_LONG(&tmp, op2_lval - 1); tmp_addr = ZEND_ADDR_CONST_ZVAL(&tmp); if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_R0) { tmp_reg = ZREG_R1; } else if (result_reg != ZREG_R0) { tmp_reg = ZREG_R0; } else { tmp_reg = ZREG_R1; } //| GET_ZVAL_LVAL result_reg, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (result_reg), (result_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (result_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (result_reg), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (result_reg != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (result_reg)); } } else { ZEND_UNREACHABLE(); } #line 5207 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| LONG_MATH ZEND_BW_AND, result_reg, tmp_addr, tmp_reg switch (ZEND_BW_AND) { case ZEND_ADD: if (Z_MODE(tmp_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(tmp_addr)))) { dasm_put(Dst, 2418, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(tmp_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(tmp_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2153, (result_reg), Z_LVAL_P(Z_ZV(tmp_addr))); } } else if (Z_MODE(tmp_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2432, (result_reg), (Z_REG(tmp_addr)), Z_OFFSET(tmp_addr)); } else if (Z_MODE(tmp_addr) == IS_REG) { dasm_put(Dst, 2353, (Z_REG(tmp_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(tmp_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(tmp_addr)))) { dasm_put(Dst, 2442, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(tmp_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(tmp_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2169, (result_reg), Z_LVAL_P(Z_ZV(tmp_addr))); } } else if (Z_MODE(tmp_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2456, (result_reg), (Z_REG(tmp_addr)), Z_OFFSET(tmp_addr)); } else if (Z_MODE(tmp_addr) == IS_REG) { dasm_put(Dst, 2385, (Z_REG(tmp_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(tmp_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(tmp_addr)))) { dasm_put(Dst, 2466, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(tmp_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(tmp_addr)))>>32), (result_reg), (tmp_reg)); } else { dasm_put(Dst, 2481, (result_reg), (result_reg), Z_LVAL_P(Z_ZV(tmp_addr))); } } else if (Z_MODE(tmp_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2490, (result_reg), (Z_REG(tmp_addr)), Z_OFFSET(tmp_addr)); } else if (Z_MODE(tmp_addr) == IS_REG) { dasm_put(Dst, 2393, (result_reg), (Z_REG(tmp_addr))); } else { ZEND_UNREACHABLE(); } break; case ZEND_BW_OR: if (Z_MODE(tmp_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(tmp_addr)))) { dasm_put(Dst, 2501, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(tmp_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(tmp_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2515, (result_reg), Z_LVAL_P(Z_ZV(tmp_addr))); } } else if (Z_MODE(tmp_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2522, (result_reg), (Z_REG(tmp_addr)), Z_OFFSET(tmp_addr)); } else if (Z_MODE(tmp_addr) == IS_REG) { dasm_put(Dst, 2402, (Z_REG(tmp_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; case ZEND_BW_AND: if (Z_MODE(tmp_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(tmp_addr)))) { dasm_put(Dst, 2532, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(tmp_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(tmp_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2546, (result_reg), Z_LVAL_P(Z_ZV(tmp_addr))); } } else if (Z_MODE(tmp_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2553, (result_reg), (Z_REG(tmp_addr)), Z_OFFSET(tmp_addr)); } else if (Z_MODE(tmp_addr) == IS_REG) { dasm_put(Dst, 2410, (Z_REG(tmp_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; case ZEND_BW_XOR: if (Z_MODE(tmp_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(tmp_addr)))) { dasm_put(Dst, 2563, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(tmp_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(tmp_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2577, (result_reg), Z_LVAL_P(Z_ZV(tmp_addr))); } } else if (Z_MODE(tmp_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2585, (result_reg), (Z_REG(tmp_addr)), Z_OFFSET(tmp_addr)); } else if (Z_MODE(tmp_addr) == IS_REG) { dasm_put(Dst, 1650, (Z_REG(tmp_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; default: ZEND_UNREACHABLE(); } #line 5208 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" (void)tmp_reg; } else { if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RAX) { //| mov aword T1, r0 // save dasm_put(Dst, 3421); #line 5212 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RCX) { //| mov aword T1, Ra(ZREG_RCX) // save dasm_put(Dst, 3426, (ZREG_RCX)); #line 5214 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } result_reg = ZREG_RDX; if (op2_lval == -1) { //| xor Ra(result_reg), Ra(result_reg) dasm_put(Dst, 1650, (result_reg), (result_reg)); #line 5218 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| GET_ZVAL_LVAL ZREG_RAX, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_RAX), (ZREG_RAX)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_RAX), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_RAX), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_RAX), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_RAX != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_RAX)); } } else { ZEND_UNREACHABLE(); } #line 5220 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_LVAL ZREG_RCX, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_RCX), (ZREG_RCX)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_RCX), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_RCX), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_RCX), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (ZREG_RCX != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (ZREG_RCX)); } } else { ZEND_UNREACHABLE(); } #line 5221 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| cqo //|.else //| cdq //|.endif //| idiv Ra(ZREG_RCX) dasm_put(Dst, 3433, (ZREG_RCX)); #line 5227 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RAX) { //| mov r0, aword T1 // restore dasm_put(Dst, 3443); #line 5230 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RCX) { //| mov Ra(ZREG_RCX), aword T1 // restore dasm_put(Dst, 3448, (ZREG_RCX)); #line 5232 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else { if ((op2_type & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE)) || !op2_range || (op2_range->min <= 0 && op2_range->max >= 0)) { if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { //| cmp aword [Ra(Z_REG(op2_addr))+Z_OFFSET(op2_addr)], 0 dasm_put(Dst, 3455, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); #line 5238 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_MODE(op2_addr) == IS_REG) { //| test Ra(Z_REG(op2_addr)), Ra(Z_REG(op2_addr)) dasm_put(Dst, 3464, (Z_REG(op2_addr)), (Z_REG(op2_addr))); #line 5240 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jz >1 //|.cold_code dasm_put(Dst, 3472); #line 5243 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 5244 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" zend_jit_invalidate_var_if_necessary(Dst, op1_type, op1_addr, op1); zend_jit_invalidate_var_if_necessary(Dst, op2_type, op2_addr, op2); //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 5247 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->mod_by_zero //|.code dasm_put(Dst, 3478); #line 5249 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } /* Prevent overflow error/crash if op1 == LONG_MIN and op2 == -1 */ if (!op2_range || (op2_range->min <= -1 && op2_range->max >= -1)) { if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { //| cmp aword [Ra(Z_REG(op2_addr))+Z_OFFSET(op2_addr)], -1 dasm_put(Dst, 3484, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); #line 5255 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_MODE(op2_addr) == IS_REG) { //| cmp Ra(Z_REG(op2_addr)), -1 dasm_put(Dst, 3494, (Z_REG(op2_addr))); #line 5257 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jz >1 //|.cold_code dasm_put(Dst, 3472); #line 5260 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| SET_ZVAL_LVAL res_addr, 0 dasm_put(Dst, 63); if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1954, (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1964, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } #line 5262 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_MODE(op1_addr) != IS_MEM_ZVAL || Z_REG(op1_addr) != Z_REG(res_addr) || Z_OFFSET(op1_addr) != Z_OFFSET(res_addr)) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF|MAY_BE_GUARD)) != MAY_BE_LONG) { //| SET_ZVAL_TYPE_INFO res_addr, IS_LONG ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); #line 5266 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } //| jmp >5 //|.code dasm_put(Dst, 3279); #line 5271 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RAX) { //| mov aword T1, r0 // save dasm_put(Dst, 3421); #line 5275 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } result_reg = ZREG_RDX; //| GET_ZVAL_LVAL ZREG_RAX, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_RAX), (ZREG_RAX)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_RAX), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_RAX), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_RAX), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_RAX != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_RAX)); } } else { ZEND_UNREACHABLE(); } #line 5278 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| cqo //|.else //| cdq //|.endif dasm_put(Dst, 3503); #line 5283 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { //| idiv aword [Ra(Z_REG(op2_addr))+Z_OFFSET(op2_addr)] dasm_put(Dst, 3506, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); #line 5285 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_MODE(op2_addr) == IS_REG) { //| idiv Ra(Z_REG(op2_addr)) dasm_put(Dst, 3435, (Z_REG(op2_addr))); #line 5287 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RAX) { //| mov r0, aword T1 // restore dasm_put(Dst, 3443); #line 5290 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else if (same_ops) { //| GET_ZVAL_LVAL result_reg, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (result_reg), (result_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (result_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (result_reg), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (result_reg != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (result_reg)); } } else { ZEND_UNREACHABLE(); } #line 5294 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| LONG_MATH_REG opcode, Ra(result_reg), Ra(result_reg) switch (opcode) { case ZEND_ADD: dasm_put(Dst, 2353, (result_reg), (result_reg)); break; case ZEND_SUB: dasm_put(Dst, 2385, (result_reg), (result_reg)); break; case ZEND_MUL: dasm_put(Dst, 2393, (result_reg), (result_reg)); break; case ZEND_BW_OR: dasm_put(Dst, 2402, (result_reg), (result_reg)); break; case ZEND_BW_AND: dasm_put(Dst, 2410, (result_reg), (result_reg)); break; case ZEND_BW_XOR: dasm_put(Dst, 1650, (result_reg), (result_reg)); break; default: ZEND_UNREACHABLE(); } #line 5295 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { zend_reg tmp_reg; if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_R0) { tmp_reg = ZREG_R1; } else if (result_reg != ZREG_R0) { tmp_reg = ZREG_R0; } else { tmp_reg = ZREG_R1; } //| GET_ZVAL_LVAL result_reg, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (result_reg), (result_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (result_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (result_reg), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (result_reg != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (result_reg)); } } else { ZEND_UNREACHABLE(); } #line 5306 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| LONG_MATH opcode, result_reg, op2_addr, tmp_reg switch (opcode) { case ZEND_ADD: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 2418, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2153, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2432, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2353, (Z_REG(op2_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; case ZEND_SUB: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 2442, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2169, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2456, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2385, (Z_REG(op2_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; case ZEND_MUL: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 2466, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (result_reg), (tmp_reg)); } else { dasm_put(Dst, 2481, (result_reg), (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2490, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2393, (result_reg), (Z_REG(op2_addr))); } else { ZEND_UNREACHABLE(); } break; case ZEND_BW_OR: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 2501, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2515, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2522, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2402, (Z_REG(op2_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; case ZEND_BW_AND: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 2532, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2546, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2553, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 2410, (Z_REG(op2_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; case ZEND_BW_XOR: if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 2563, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (tmp_reg), (result_reg)); } else { dasm_put(Dst, 2577, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2585, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 1650, (Z_REG(op2_addr)), (result_reg)); } else { ZEND_UNREACHABLE(); } break; default: ZEND_UNREACHABLE(); } #line 5307 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" (void)tmp_reg; } if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != result_reg) { //| SET_ZVAL_LVAL res_addr, Ra(result_reg) if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (result_reg), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (result_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } #line 5312 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_MODE(op1_addr) != IS_MEM_ZVAL || Z_REG(op1_addr) != Z_REG(res_addr) || Z_OFFSET(op1_addr) != Z_OFFSET(res_addr)) { if ((res_use_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF|MAY_BE_GUARD)) != MAY_BE_LONG) { //| SET_ZVAL_TYPE_INFO res_addr, IS_LONG ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); #line 5317 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } if ((op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_LONG)) || (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_LONG))) { if ((op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_LONG)) { //|.cold_code dasm_put(Dst, 289); #line 5326 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|6: dasm_put(Dst, 3290); #line 5328 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(op1_addr) != IS_MEM_ZVAL || Z_REG(op1_addr) != ZREG_FCARG1) { if (Z_MODE(res_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, res_var); //| LOAD_ZVAL_ADDR FCARG1a, real_addr if (Z_MODE(real_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(real_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(real_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(real_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(real_addr)))>>32)); } } else if (Z_MODE(real_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(real_addr)) { dasm_put(Dst, 2220, (Z_REG(real_addr)), Z_OFFSET(real_addr)); } else { dasm_put(Dst, 2228, (Z_REG(real_addr))); } } else { ZEND_UNREACHABLE(); } #line 5332 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_REG(res_addr) != ZREG_FCARG1 || Z_OFFSET(res_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2220, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2228, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 5334 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_MODE(op1_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var); if (!zend_jit_spill_store(Dst, op1_addr, real_addr, op1_info, 1)) { return 0; } op1_addr = real_addr; } //| LOAD_ZVAL_ADDR FCARG2a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2255, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 5343 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (Z_MODE(op1_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var); if (!zend_jit_spill_store(Dst, op1_addr, real_addr, op1_info, 1)) { return 0; } op1_addr = real_addr; } //| LOAD_ZVAL_ADDR FCARG2a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2255, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 5352 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(res_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, res_var); //| LOAD_ZVAL_ADDR FCARG1a, real_addr if (Z_MODE(real_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(real_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(real_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(real_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(real_addr)))>>32)); } } else if (Z_MODE(real_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(real_addr)) { dasm_put(Dst, 2220, (Z_REG(real_addr)), Z_OFFSET(real_addr)); } else { dasm_put(Dst, 2228, (Z_REG(real_addr))); } } else { ZEND_UNREACHABLE(); } #line 5355 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_REG(res_addr) != ZREG_FCARG1 || Z_OFFSET(res_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2220, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2228, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 5357 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (Z_MODE(op2_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var); if (!zend_jit_spill_store(Dst, op2_addr, real_addr, op2_info, 1)) { return 0; } op2_addr = real_addr; } //|.if X64 //| LOAD_ZVAL_ADDR CARG3, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 3303, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 3311, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 5368 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ZVAL_ADDR op2_addr, r0 //|.endif //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 5373 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opcode == ZEND_BW_OR) { //| EXT_CALL bitwise_or_function, r0 if (MAY_USE_32BIT_ADDR(bitwise_or_function)) { dasm_put(Dst, 46, (ptrdiff_t)(bitwise_or_function)); } else { if (IS_SIGNED_32BIT(bitwise_or_function)) { dasm_put(Dst, 49, ((ptrdiff_t)bitwise_or_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)bitwise_or_function)), (unsigned int)((((ptrdiff_t)bitwise_or_function))>>32)); } dasm_put(Dst, 59); } #line 5375 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opcode == ZEND_BW_AND) { //| EXT_CALL bitwise_and_function, r0 if (MAY_USE_32BIT_ADDR(bitwise_and_function)) { dasm_put(Dst, 46, (ptrdiff_t)(bitwise_and_function)); } else { if (IS_SIGNED_32BIT(bitwise_and_function)) { dasm_put(Dst, 49, ((ptrdiff_t)bitwise_and_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)bitwise_and_function)), (unsigned int)((((ptrdiff_t)bitwise_and_function))>>32)); } dasm_put(Dst, 59); } #line 5377 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opcode == ZEND_BW_XOR) { //| EXT_CALL bitwise_xor_function, r0 if (MAY_USE_32BIT_ADDR(bitwise_xor_function)) { dasm_put(Dst, 46, (ptrdiff_t)(bitwise_xor_function)); } else { if (IS_SIGNED_32BIT(bitwise_xor_function)) { dasm_put(Dst, 49, ((ptrdiff_t)bitwise_xor_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)bitwise_xor_function)), (unsigned int)((((ptrdiff_t)bitwise_xor_function))>>32)); } dasm_put(Dst, 59); } #line 5379 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opcode == ZEND_SL) { //| EXT_CALL shift_left_function, r0 if (MAY_USE_32BIT_ADDR(shift_left_function)) { dasm_put(Dst, 46, (ptrdiff_t)(shift_left_function)); } else { if (IS_SIGNED_32BIT(shift_left_function)) { dasm_put(Dst, 49, ((ptrdiff_t)shift_left_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)shift_left_function)), (unsigned int)((((ptrdiff_t)shift_left_function))>>32)); } dasm_put(Dst, 59); } #line 5381 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opcode == ZEND_SR) { //| EXT_CALL shift_right_function, r0 if (MAY_USE_32BIT_ADDR(shift_right_function)) { dasm_put(Dst, 46, (ptrdiff_t)(shift_right_function)); } else { if (IS_SIGNED_32BIT(shift_right_function)) { dasm_put(Dst, 49, ((ptrdiff_t)shift_right_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)shift_right_function)), (unsigned int)((((ptrdiff_t)shift_right_function))>>32)); } dasm_put(Dst, 59); } #line 5383 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opcode == ZEND_MOD) { //| EXT_CALL mod_function, r0 if (MAY_USE_32BIT_ADDR(mod_function)) { dasm_put(Dst, 46, (ptrdiff_t)(mod_function)); } else { if (IS_SIGNED_32BIT(mod_function)) { dasm_put(Dst, 49, ((ptrdiff_t)mod_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)mod_function)), (unsigned int)((((ptrdiff_t)mod_function))>>32)); } dasm_put(Dst, 59); } #line 5385 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } //|.if not(X64) //| add r4, 12 //|.endif if (op1_addr == res_addr && (op2_info & MAY_BE_RCN)) { /* compound assignment may decrement "op2" refcount */ op2_info |= MAY_BE_RC1; } //| FREE_OP op1_type, op1, op1_info, 0, NULL if (op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 5396 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| FREE_OP op2_type, op2, op2_info, 0, NULL if (op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 5397 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { if (opline->opcode == ZEND_ASSIGN_DIM_OP && (opline->op2_type & (IS_VAR|IS_TMP_VAR))) { //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.exception)) { dasm_put(Dst, 71, &executor_globals.exception); } else { dasm_put(Dst, 78, (unsigned int)(((ptrdiff_t)&executor_globals.exception)), (unsigned int)((((ptrdiff_t)&executor_globals.exception))>>32)); } #line 5400 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne ->exception_handler_free_op2 dasm_put(Dst, 3317); #line 5401 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RX) { zend_jit_check_exception_undef_result(Dst, opline); } else { zend_jit_check_exception(Dst); } } if (Z_MODE(res_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, res_var); if (!zend_jit_load_reg(Dst, real_addr, res_addr, res_info)) { return 0; } } if ((op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_LONG)) { //| jmp >5 //|.code dasm_put(Dst, 3279); #line 5417 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //|5: dasm_put(Dst, 498); #line 5420 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_long_math(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_ssa_range *op1_range, zend_jit_addr op1_addr, uint32_t op2_info, zend_ssa_range *op2_range, zend_jit_addr op2_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr, int may_throw) { ZEND_ASSERT(!(op1_info & MAY_BE_UNDEF) && !(op2_info & MAY_BE_UNDEF)); ZEND_ASSERT((op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_LONG)); if (!zend_jit_long_math_helper(Dst, opline, opline->opcode, opline->op1_type, opline->op1, op1_addr, op1_info, op1_range, opline->op2_type, opline->op2, op2_addr, op2_info, op2_range, opline->result.var, res_addr, res_info, res_use_info, may_throw)) { return 0; } if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, res_info)) { return 0; } return 1; } static int zend_jit_concat_helper(dasm_State **Dst, const zend_op *opline, zend_uchar op1_type, znode_op op1, zend_jit_addr op1_addr, uint32_t op1_info, zend_uchar op2_type, znode_op op2, zend_jit_addr op2_addr, uint32_t op2_info, zend_jit_addr res_addr, int may_throw) { #if 1 if ((op1_info & MAY_BE_STRING) && (op2_info & MAY_BE_STRING)) { if (op1_info & ((MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF) - MAY_BE_STRING)) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_STRING, >6 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING); #line 5458 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op2_info & ((MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF) - MAY_BE_STRING)) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_STRING, >6 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_STRING); #line 5461 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_MODE(op1_addr) == IS_MEM_ZVAL && Z_REG(op1_addr) == Z_REG(res_addr) && Z_OFFSET(op1_addr) == Z_OFFSET(res_addr)) { if (Z_REG(res_addr) != ZREG_FCARG1 || Z_OFFSET(res_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2220, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2228, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 5465 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ZVAL_ADDR FCARG2a, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 5467 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_fast_assign_concat_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fast_assign_concat_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fast_assign_concat_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fast_assign_concat_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fast_assign_concat_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fast_assign_concat_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fast_assign_concat_helper))>>32)); } dasm_put(Dst, 59); } #line 5468 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" /* concatenation with itself may reduce refcount */ op2_info |= MAY_BE_RC1; } else { if (Z_REG(res_addr) != ZREG_FCARG1 || Z_OFFSET(res_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2220, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2228, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 5473 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ZVAL_ADDR FCARG2a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2255, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 5475 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| LOAD_ZVAL_ADDR CARG3, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 3303, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 3311, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 5477 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ZVAL_ADDR op2_addr, r0 //|.endif if (op1_type == IS_CV || op1_type == IS_CONST) { //| EXT_CALL zend_jit_fast_concat_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fast_concat_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fast_concat_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fast_concat_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fast_concat_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fast_concat_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fast_concat_helper))>>32)); } dasm_put(Dst, 59); } #line 5483 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_fast_concat_tmp_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fast_concat_tmp_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fast_concat_tmp_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fast_concat_tmp_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fast_concat_tmp_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fast_concat_tmp_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fast_concat_tmp_helper))>>32)); } dasm_put(Dst, 59); } #line 5485 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if not(X64) //| add r4, 12 //|.endif } /* concatenation with empty string may increase refcount */ op2_info |= MAY_BE_RCN; //| FREE_OP op2_type, op2, op2_info, 0, opline if (op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 5493 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|5: dasm_put(Dst, 498); #line 5494 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if ((op1_info & ((MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF) - MAY_BE_STRING)) || (op2_info & ((MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF) - MAY_BE_STRING))) { if ((op1_info & MAY_BE_STRING) && (op2_info & MAY_BE_STRING)) { //|.cold_code dasm_put(Dst, 289); #line 5499 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|6: dasm_put(Dst, 3290); #line 5500 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } #endif if (Z_MODE(op1_addr) != IS_MEM_ZVAL || Z_REG(op1_addr) != ZREG_FCARG1) { if (Z_REG(res_addr) != ZREG_FCARG1 || Z_OFFSET(res_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2220, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2228, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 5505 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ZVAL_ADDR FCARG2a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2255, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 5507 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LOAD_ZVAL_ADDR FCARG2a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2255, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 5509 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(res_addr) != ZREG_FCARG1 || Z_OFFSET(res_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2220, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2228, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 5511 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //|.if X64 //| LOAD_ZVAL_ADDR CARG3, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 3303, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 3311, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 5515 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ZVAL_ADDR op2_addr, r0 //|.endif //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 5520 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL concat_function, r0 if (MAY_USE_32BIT_ADDR(concat_function)) { dasm_put(Dst, 46, (ptrdiff_t)(concat_function)); } else { if (IS_SIGNED_32BIT(concat_function)) { dasm_put(Dst, 49, ((ptrdiff_t)concat_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)concat_function)), (unsigned int)((((ptrdiff_t)concat_function))>>32)); } dasm_put(Dst, 59); } #line 5521 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) //| add r4, 12 //|.endif /* concatenation with empty string may increase refcount */ op1_info |= MAY_BE_RCN; op2_info |= MAY_BE_RCN; //| FREE_OP op1_type, op1, op1_info, 0, NULL if (op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 5528 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| FREE_OP op2_type, op2, op2_info, 0, NULL if (op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 5529 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RX) { zend_jit_check_exception_undef_result(Dst, opline); } else { zend_jit_check_exception(Dst); } } #if 1 if ((op1_info & MAY_BE_STRING) && (op2_info & MAY_BE_STRING)) { //| jmp <5 //|.code dasm_put(Dst, 3322); #line 5540 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } #endif return 1; } static int zend_jit_concat(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, uint32_t op2_info, zend_jit_addr res_addr, int may_throw) { zend_jit_addr op1_addr, op2_addr; ZEND_ASSERT(!(op1_info & MAY_BE_UNDEF) && !(op2_info & MAY_BE_UNDEF)); ZEND_ASSERT((op1_info & MAY_BE_STRING) && (op2_info & MAY_BE_STRING)); op1_addr = OP1_ADDR(); op2_addr = OP2_ADDR(); return zend_jit_concat_helper(Dst, opline, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, res_addr, may_throw); } static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_op *opline, uint32_t type, uint32_t op1_info, uint32_t op2_info, uint8_t dim_type, const void *found_exit_addr, const void *not_found_exit_addr, const void *exit_addr) /* Labels: 1,2,3,4,5 */ { zend_jit_addr op2_addr = OP2_ADDR(); zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && type == BP_VAR_R && !exit_addr) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } } if (op2_info & MAY_BE_LONG) { bool op2_loaded = 0; bool packed_loaded = 0; bool bad_packed_key = 0; if (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - MAY_BE_LONG)) { //| // if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) //| IF_NOT_ZVAL_TYPE op2_addr, IS_LONG, >3 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3239, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 5584 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & MAY_BE_PACKED_GUARD) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_PACKED_GUARD); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } if (op1_info & MAY_BE_ARRAY_PACKED) { //| test dword [FCARG1a + offsetof(zend_array, u.flags)], HASH_FLAG_PACKED //| jz &exit_addr dasm_put(Dst, 1690, offsetof(zend_array, u.flags), HASH_FLAG_PACKED, (ptrdiff_t)(exit_addr)); #line 5595 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| test dword [FCARG1a + offsetof(zend_array, u.flags)], HASH_FLAG_PACKED //| jnz &exit_addr dasm_put(Dst, 1699, offsetof(zend_array, u.flags), HASH_FLAG_PACKED, (ptrdiff_t)(exit_addr)); #line 5598 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (type == BP_VAR_W) { //| // hval = Z_LVAL_P(dim); //| GET_ZVAL_LVAL ZREG_FCARG2, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG2), (ZREG_FCARG2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG2), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG2), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (ZREG_FCARG2 != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (ZREG_FCARG2)); } } else { ZEND_UNREACHABLE(); } #line 5603 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op2_loaded = 1; } if (op1_info & MAY_BE_ARRAY_PACKED) { zend_long val = -1; if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { val = Z_LVAL_P(Z_ZV(op2_addr)); if (val >= 0 && val < HT_MAX_SIZE) { packed_loaded = 1; } else { bad_packed_key = 1; } } else { if (!op2_loaded) { //| // hval = Z_LVAL_P(dim); //| GET_ZVAL_LVAL ZREG_FCARG2, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG2), (ZREG_FCARG2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG2), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG2), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (ZREG_FCARG2 != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (ZREG_FCARG2)); } } else { ZEND_UNREACHABLE(); } #line 5619 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op2_loaded = 1; } packed_loaded = 1; } if (dim_type == IS_UNDEF && type == BP_VAR_W && packed_loaded) { /* don't generate "fast" code for packed array */ packed_loaded = 0; } if (packed_loaded) { //| // ZEND_HASH_INDEX_FIND(ht, hval, retval, num_undef); if (op1_info & MAY_BE_ARRAY_NUMERIC_HASH) { //| test dword [FCARG1a + offsetof(zend_array, u.flags)], HASH_FLAG_PACKED //| jz >4 // HASH_FIND dasm_put(Dst, 3515, offsetof(zend_array, u.flags), HASH_FLAG_PACKED); #line 5634 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // if (EXPECTED((zend_ulong)(_h) < (zend_ulong)(_ht)->nNumUsed)) //|.if X64 //| mov eax, dword [FCARG1a + offsetof(zend_array, nNumUsed)] dasm_put(Dst, 3525, offsetof(zend_array, nNumUsed)); #line 5638 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (val == 0) { //| test r0, r0 dasm_put(Dst, 3529); #line 5640 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (val > 0 && !op2_loaded) { //| cmp r0, val dasm_put(Dst, 3533, val); #line 5642 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| cmp r0, FCARG2a dasm_put(Dst, 3539); #line 5644 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.else if (val >= 0 && !op2_loaded) { //| cmp dword [FCARG1a + offsetof(zend_array, nNumUsed)], val } else { //| cmp dword [FCARG1a + offsetof(zend_array, nNumUsed)], FCARG2a } //|.endif if (type == BP_JIT_IS) { if (not_found_exit_addr) { //| jbe ¬_found_exit_addr dasm_put(Dst, 3544, (ptrdiff_t)(not_found_exit_addr)); #line 5655 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jbe >9 // NOT_FOUND dasm_put(Dst, 3548); #line 5657 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && type == BP_VAR_R) { //| jbe &exit_addr dasm_put(Dst, 3544, (ptrdiff_t)(exit_addr)); #line 5660 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (type == BP_VAR_IS && not_found_exit_addr) { //| jbe ¬_found_exit_addr dasm_put(Dst, 3544, (ptrdiff_t)(not_found_exit_addr)); #line 5662 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (type == BP_VAR_RW && not_found_exit_addr) { //| jbe ¬_found_exit_addr dasm_put(Dst, 3544, (ptrdiff_t)(not_found_exit_addr)); #line 5664 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (type == BP_VAR_IS && found_exit_addr) { //| jbe >7 // NOT_FOUND dasm_put(Dst, 3553); #line 5666 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jbe >2 // NOT_FOUND dasm_put(Dst, 3558); #line 5668 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // _ret = &_ht->arPacked[h]; if (val >= 0) { //| mov r0, aword [FCARG1a + offsetof(zend_array, arPacked)] dasm_put(Dst, 3563, offsetof(zend_array, arPacked)); #line 5672 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (val != 0) { //| add r0, val * sizeof(zval) dasm_put(Dst, 3568, val * sizeof(zval)); #line 5674 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //|.if X64 //| mov r0, FCARG2a //| shl r0, 4 //|.else //| imul r0, FCARG2a, sizeof(zval) //|.endif //| add r0, aword [FCARG1a + offsetof(zend_array, arPacked)] dasm_put(Dst, 3573, offsetof(zend_array, arPacked)); #line 5683 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } switch (type) { case BP_JIT_IS: if (op1_info & MAY_BE_ARRAY_NUMERIC_HASH) { if (packed_loaded) { //| jmp >5 dasm_put(Dst, 3285); #line 5691 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|4: dasm_put(Dst, 388); #line 5693 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!op2_loaded) { //| // hval = Z_LVAL_P(dim); //| GET_ZVAL_LVAL ZREG_FCARG2, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG2), (ZREG_FCARG2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG2), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG2), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (ZREG_FCARG2 != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (ZREG_FCARG2)); } } else { ZEND_UNREACHABLE(); } #line 5696 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (packed_loaded) { //| EXT_CALL _zend_hash_index_find, r0 if (MAY_USE_32BIT_ADDR(_zend_hash_index_find)) { dasm_put(Dst, 46, (ptrdiff_t)(_zend_hash_index_find)); } else { if (IS_SIGNED_32BIT(_zend_hash_index_find)) { dasm_put(Dst, 49, ((ptrdiff_t)_zend_hash_index_find)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_zend_hash_index_find)), (unsigned int)((((ptrdiff_t)_zend_hash_index_find))>>32)); } dasm_put(Dst, 59); } #line 5699 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_hash_index_find, r0 if (MAY_USE_32BIT_ADDR(zend_hash_index_find)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_index_find)); } else { if (IS_SIGNED_32BIT(zend_hash_index_find)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_index_find)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_index_find)), (unsigned int)((((ptrdiff_t)zend_hash_index_find))>>32)); } dasm_put(Dst, 59); } #line 5701 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| test r0, r0 dasm_put(Dst, 3529); #line 5703 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (not_found_exit_addr) { //| jz ¬_found_exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(not_found_exit_addr)); #line 5705 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jz >9 // NOT_FOUND dasm_put(Dst, 3586); #line 5707 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op2_info & MAY_BE_STRING) { //| jmp >5 dasm_put(Dst, 3285); #line 5710 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (packed_loaded) { if (op2_info & MAY_BE_STRING) { //| jmp >5 dasm_put(Dst, 3285); #line 5714 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (not_found_exit_addr) { //| jmp ¬_found_exit_addr dasm_put(Dst, 150, (ptrdiff_t)(not_found_exit_addr)); #line 5717 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >9 // NOT_FOUND dasm_put(Dst, 3591); #line 5719 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case BP_VAR_R: case BP_VAR_IS: case BP_VAR_UNSET: if (packed_loaded) { if (op1_info & MAY_BE_ARRAY_NUMERIC_HASH) { //| IF_NOT_Z_TYPE r0, IS_UNDEF, >8 dasm_put(Dst, 3596, offsetof(zval, u1.v.type), IS_UNDEF); #line 5727 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && type == BP_VAR_R) { /* perform IS_UNDEF check only after result type guard (during deoptimization) */ if (!found_exit_addr || (op1_info & MAY_BE_ARRAY_NUMERIC_HASH)) { //| IF_Z_TYPE r0, IS_UNDEF, &exit_addr dasm_put(Dst, 3605, offsetof(zval, u1.v.type), IS_UNDEF, (ptrdiff_t)(exit_addr)); #line 5731 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (type == BP_VAR_IS && not_found_exit_addr) { //| IF_Z_TYPE r0, IS_UNDEF, ¬_found_exit_addr dasm_put(Dst, 3605, offsetof(zval, u1.v.type), IS_UNDEF, (ptrdiff_t)(not_found_exit_addr)); #line 5734 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (type == BP_VAR_IS && found_exit_addr) { //| IF_Z_TYPE r0, IS_UNDEF, >7 // NOT_FOUND dasm_put(Dst, 3613, offsetof(zval, u1.v.type), IS_UNDEF); #line 5736 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_Z_TYPE r0, IS_UNDEF, >2 // NOT_FOUND dasm_put(Dst, 3622, offsetof(zval, u1.v.type), IS_UNDEF); #line 5738 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!(op1_info & MAY_BE_ARRAY_KEY_LONG) || (packed_loaded && (op1_info & MAY_BE_ARRAY_NUMERIC_HASH))) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && type == BP_VAR_R) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 5743 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (type == BP_VAR_IS && not_found_exit_addr) { //| jmp ¬_found_exit_addr dasm_put(Dst, 150, (ptrdiff_t)(not_found_exit_addr)); #line 5745 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (type == BP_VAR_IS && found_exit_addr) { //| jmp >7 // NOT_FOUND dasm_put(Dst, 3631); #line 5747 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >2 // NOT_FOUND dasm_put(Dst, 3636); #line 5749 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!packed_loaded || (op1_info & MAY_BE_ARRAY_NUMERIC_HASH)) { //|4: dasm_put(Dst, 388); #line 5753 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!op2_loaded) { //| // hval = Z_LVAL_P(dim); //| GET_ZVAL_LVAL ZREG_FCARG2, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG2), (ZREG_FCARG2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG2), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG2), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (ZREG_FCARG2 != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (ZREG_FCARG2)); } } else { ZEND_UNREACHABLE(); } #line 5756 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (packed_loaded) { //| EXT_CALL _zend_hash_index_find, r0 if (MAY_USE_32BIT_ADDR(_zend_hash_index_find)) { dasm_put(Dst, 46, (ptrdiff_t)(_zend_hash_index_find)); } else { if (IS_SIGNED_32BIT(_zend_hash_index_find)) { dasm_put(Dst, 49, ((ptrdiff_t)_zend_hash_index_find)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_zend_hash_index_find)), (unsigned int)((((ptrdiff_t)_zend_hash_index_find))>>32)); } dasm_put(Dst, 59); } #line 5759 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_hash_index_find, r0 if (MAY_USE_32BIT_ADDR(zend_hash_index_find)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_index_find)); } else { if (IS_SIGNED_32BIT(zend_hash_index_find)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_index_find)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_index_find)), (unsigned int)((((ptrdiff_t)zend_hash_index_find))>>32)); } dasm_put(Dst, 59); } #line 5761 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| test r0, r0 dasm_put(Dst, 3529); #line 5763 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && type == BP_VAR_R) { //| jz &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 5765 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (type == BP_VAR_IS && not_found_exit_addr) { //| jz ¬_found_exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(not_found_exit_addr)); #line 5767 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (type == BP_VAR_IS && found_exit_addr) { //| jz >7 // NOT_FOUND dasm_put(Dst, 3617); #line 5769 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jz >2 // NOT_FOUND dasm_put(Dst, 1929); #line 5771 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //|.cold_code dasm_put(Dst, 289); #line 5774 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 5775 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" switch (type) { case BP_VAR_R: if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE) { //| // zend_error(E_WARNING,"Undefined array key " ZEND_LONG_FMT, hval); //| // retval = &EG(uninitialized_zval); //| UNDEFINED_OFFSET opline if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); dasm_put(Dst, 3641); } else { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } dasm_put(Dst, 3645); } #line 5781 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >9 dasm_put(Dst, 3591); #line 5782 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case BP_VAR_IS: case BP_VAR_UNSET: if (!not_found_exit_addr && !found_exit_addr) { //| // retval = &EG(uninitialized_zval); //| SET_ZVAL_TYPE_INFO res_addr, IS_NULL ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 5789 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >9 dasm_put(Dst, 3649, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); #line 5790 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; default: ZEND_UNREACHABLE(); } //|.code dasm_put(Dst, 386); #line 5796 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case BP_VAR_RW: if (packed_loaded && !not_found_exit_addr) { //| IF_NOT_Z_TYPE r0, IS_UNDEF, >8 dasm_put(Dst, 3596, offsetof(zval, u1.v.type), IS_UNDEF); #line 5800 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!packed_loaded || !not_found_exit_addr || (op1_info & MAY_BE_ARRAY_NUMERIC_HASH)) { if (packed_loaded && not_found_exit_addr) { //|.cold_code dasm_put(Dst, 289); #line 5806 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|2: //|4: dasm_put(Dst, 3662); #line 5809 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!op2_loaded) { //| // hval = Z_LVAL_P(dim); //| GET_ZVAL_LVAL ZREG_FCARG2, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG2), (ZREG_FCARG2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG2), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG2), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (ZREG_FCARG2 != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (ZREG_FCARG2)); } } else { ZEND_UNREACHABLE(); } #line 5812 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (packed_loaded) { //| EXT_CALL zend_jit_hash_index_lookup_rw_no_packed, r0 if (MAY_USE_32BIT_ADDR(zend_jit_hash_index_lookup_rw_no_packed)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_hash_index_lookup_rw_no_packed)); } else { if (IS_SIGNED_32BIT(zend_jit_hash_index_lookup_rw_no_packed)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_hash_index_lookup_rw_no_packed)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_hash_index_lookup_rw_no_packed)), (unsigned int)((((ptrdiff_t)zend_jit_hash_index_lookup_rw_no_packed))>>32)); } dasm_put(Dst, 59); } #line 5815 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_hash_index_lookup_rw, r0 if (MAY_USE_32BIT_ADDR(zend_jit_hash_index_lookup_rw)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_hash_index_lookup_rw)); } else { if (IS_SIGNED_32BIT(zend_jit_hash_index_lookup_rw)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_hash_index_lookup_rw)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_hash_index_lookup_rw)), (unsigned int)((((ptrdiff_t)zend_jit_hash_index_lookup_rw))>>32)); } dasm_put(Dst, 59); } #line 5817 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| test r0, r0 dasm_put(Dst, 3529); #line 5819 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (not_found_exit_addr) { if (packed_loaded) { //| jnz >8 //| jmp ¬_found_exit_addr //|.code dasm_put(Dst, 3667, (ptrdiff_t)(not_found_exit_addr)); #line 5824 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jz ¬_found_exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(not_found_exit_addr)); #line 5826 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| jz >9 dasm_put(Dst, 3586); #line 5829 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } break; case BP_VAR_W: if (packed_loaded) { //| IF_NOT_Z_TYPE r0, IS_UNDEF, >8 dasm_put(Dst, 3596, offsetof(zval, u1.v.type), IS_UNDEF); #line 5835 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!(op1_info & MAY_BE_ARRAY_KEY_LONG) || (op1_info & MAY_BE_ARRAY_NUMERIC_HASH) || packed_loaded || bad_packed_key || dim_type == IS_UNDEF) { //|2: //|4: dasm_put(Dst, 3662); #line 5839 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!op2_loaded) { //| // hval = Z_LVAL_P(dim); //| GET_ZVAL_LVAL ZREG_FCARG2, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG2), (ZREG_FCARG2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG2), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG2), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (ZREG_FCARG2 != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (ZREG_FCARG2)); } } else { ZEND_UNREACHABLE(); } #line 5842 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_hash_index_lookup, r0 if (MAY_USE_32BIT_ADDR(zend_hash_index_lookup)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_index_lookup)); } else { if (IS_SIGNED_32BIT(zend_hash_index_lookup)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_index_lookup)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_index_lookup)), (unsigned int)((((ptrdiff_t)zend_hash_index_lookup))>>32)); } dasm_put(Dst, 59); } #line 5844 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; default: ZEND_UNREACHABLE(); } if (type != BP_JIT_IS && (op2_info & MAY_BE_STRING)) { //| jmp >8 dasm_put(Dst, 3676); #line 5852 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op2_info & MAY_BE_STRING) { //|3: dasm_put(Dst, 346); #line 5857 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_LONG|MAY_BE_STRING))) { //| // if (EXPECTED(Z_TYPE_P(dim) == IS_STRING)) //| IF_NOT_ZVAL_TYPE op2_addr, IS_STRING, >3 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3239, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_STRING); #line 5860 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // offset_key = Z_STR_P(dim); //| GET_ZVAL_LVAL ZREG_FCARG2, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG2), (ZREG_FCARG2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG2), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG2), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (ZREG_FCARG2 != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (ZREG_FCARG2)); } } else { ZEND_UNREACHABLE(); } #line 5863 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // retval = zend_hash_find(ht, offset_key); switch (type) { case BP_JIT_IS: if (opline->op2_type != IS_CONST) { //| cmp byte [FCARG2a + offsetof(zend_string, val)], '9' //| jle >1 //|.cold_code dasm_put(Dst, 3681, offsetof(zend_string, val), '9'); #line 5870 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| EXT_CALL zend_jit_symtable_find, r0 dasm_put(Dst, 63); if (MAY_USE_32BIT_ADDR(zend_jit_symtable_find)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_symtable_find)); } else { if (IS_SIGNED_32BIT(zend_jit_symtable_find)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_symtable_find)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_symtable_find)), (unsigned int)((((ptrdiff_t)zend_jit_symtable_find))>>32)); } dasm_put(Dst, 59); } #line 5872 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >1 //|.code dasm_put(Dst, 3691); #line 5874 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_hash_find, r0 if (MAY_USE_32BIT_ADDR(zend_hash_find)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_find)); } else { if (IS_SIGNED_32BIT(zend_hash_find)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_find)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_find)), (unsigned int)((((ptrdiff_t)zend_hash_find))>>32)); } dasm_put(Dst, 59); } #line 5875 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 5876 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_hash_find_known_hash, r0 if (MAY_USE_32BIT_ADDR(zend_hash_find_known_hash)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_find_known_hash)); } else { if (IS_SIGNED_32BIT(zend_hash_find_known_hash)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_find_known_hash)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_find_known_hash)), (unsigned int)((((ptrdiff_t)zend_hash_find_known_hash))>>32)); } dasm_put(Dst, 59); } #line 5878 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| test r0, r0 dasm_put(Dst, 3529); #line 5880 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (not_found_exit_addr) { //| jz ¬_found_exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(not_found_exit_addr)); #line 5882 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jz >9 // NOT_FOUND dasm_put(Dst, 3586); #line 5884 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case BP_VAR_R: case BP_VAR_IS: case BP_VAR_UNSET: if (opline->op2_type != IS_CONST) { //| cmp byte [FCARG2a + offsetof(zend_string, val)], '9' //| jle >1 //|.cold_code dasm_put(Dst, 3681, offsetof(zend_string, val), '9'); #line 5893 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| EXT_CALL zend_jit_symtable_find, r0 dasm_put(Dst, 63); if (MAY_USE_32BIT_ADDR(zend_jit_symtable_find)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_symtable_find)); } else { if (IS_SIGNED_32BIT(zend_jit_symtable_find)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_symtable_find)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_symtable_find)), (unsigned int)((((ptrdiff_t)zend_jit_symtable_find))>>32)); } dasm_put(Dst, 59); } #line 5895 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >1 //|.code dasm_put(Dst, 3691); #line 5897 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_hash_find, r0 if (MAY_USE_32BIT_ADDR(zend_hash_find)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_find)); } else { if (IS_SIGNED_32BIT(zend_hash_find)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_find)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_find)), (unsigned int)((((ptrdiff_t)zend_hash_find))>>32)); } dasm_put(Dst, 59); } #line 5898 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 5899 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_hash_find_known_hash, r0 if (MAY_USE_32BIT_ADDR(zend_hash_find_known_hash)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_find_known_hash)); } else { if (IS_SIGNED_32BIT(zend_hash_find_known_hash)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_find_known_hash)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_find_known_hash)), (unsigned int)((((ptrdiff_t)zend_hash_find_known_hash))>>32)); } dasm_put(Dst, 59); } #line 5901 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| test r0, r0 dasm_put(Dst, 3529); #line 5903 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && type == BP_VAR_R) { //| jz &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 5905 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (type == BP_VAR_IS && not_found_exit_addr) { //| jz ¬_found_exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(not_found_exit_addr)); #line 5907 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (type == BP_VAR_IS && found_exit_addr) { //| jz >7 // NOT_FOUND dasm_put(Dst, 3617); #line 5909 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jz >2 // NOT_FOUND //|.cold_code dasm_put(Dst, 3697); #line 5912 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 5913 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" switch (type) { case BP_VAR_R: // zend_error(E_WARNING, "Undefined array key \"%s\"", ZSTR_VAL(offset_key)); //| UNDEFINED_INDEX opline if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); dasm_put(Dst, 3703); } else { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } dasm_put(Dst, 3707); } #line 5917 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >9 dasm_put(Dst, 3591); #line 5918 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case BP_VAR_IS: case BP_VAR_UNSET: //| // retval = &EG(uninitialized_zval); //| SET_ZVAL_TYPE_INFO res_addr, IS_NULL ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 5923 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >9 dasm_put(Dst, 3649, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); #line 5924 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; default: ZEND_UNREACHABLE(); } //|.code dasm_put(Dst, 386); #line 5929 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case BP_VAR_RW: if (opline->op2_type != IS_CONST) { //| EXT_CALL zend_jit_symtable_lookup_rw, r0 if (MAY_USE_32BIT_ADDR(zend_jit_symtable_lookup_rw)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_symtable_lookup_rw)); } else { if (IS_SIGNED_32BIT(zend_jit_symtable_lookup_rw)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_symtable_lookup_rw)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_symtable_lookup_rw)), (unsigned int)((((ptrdiff_t)zend_jit_symtable_lookup_rw))>>32)); } dasm_put(Dst, 59); } #line 5934 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_hash_lookup_rw, r0 if (MAY_USE_32BIT_ADDR(zend_jit_hash_lookup_rw)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_hash_lookup_rw)); } else { if (IS_SIGNED_32BIT(zend_jit_hash_lookup_rw)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_hash_lookup_rw)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_hash_lookup_rw)), (unsigned int)((((ptrdiff_t)zend_jit_hash_lookup_rw))>>32)); } dasm_put(Dst, 59); } #line 5936 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| test r0, r0 dasm_put(Dst, 3529); #line 5938 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (not_found_exit_addr) { //| jz ¬_found_exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(not_found_exit_addr)); #line 5940 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jz >9 dasm_put(Dst, 3586); #line 5942 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case BP_VAR_W: if (opline->op2_type != IS_CONST) { //| EXT_CALL zend_jit_symtable_lookup_w, r0 if (MAY_USE_32BIT_ADDR(zend_jit_symtable_lookup_w)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_symtable_lookup_w)); } else { if (IS_SIGNED_32BIT(zend_jit_symtable_lookup_w)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_symtable_lookup_w)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_symtable_lookup_w)), (unsigned int)((((ptrdiff_t)zend_jit_symtable_lookup_w))>>32)); } dasm_put(Dst, 59); } #line 5947 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_hash_lookup, r0 if (MAY_USE_32BIT_ADDR(zend_hash_lookup)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_lookup)); } else { if (IS_SIGNED_32BIT(zend_hash_lookup)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_lookup)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_lookup)), (unsigned int)((((ptrdiff_t)zend_hash_lookup))>>32)); } dasm_put(Dst, 59); } #line 5949 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; default: ZEND_UNREACHABLE(); } } if (type == BP_JIT_IS && (op2_info & (MAY_BE_LONG|MAY_BE_STRING))) { //|5: dasm_put(Dst, 498); #line 5958 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_ARRAY_OF_REF) { //| ZVAL_DEREF r0, MAY_BE_REF if (MAY_BE_REF & MAY_BE_REF) { dasm_put(Dst, 3711, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 5960 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| cmp byte [r0 + 8], IS_NULL dasm_put(Dst, 3729, 8, IS_NULL); #line 5962 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (not_found_exit_addr) { //| jle ¬_found_exit_addr dasm_put(Dst, 3734, (ptrdiff_t)(not_found_exit_addr)); #line 5964 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (found_exit_addr) { //| jg &found_exit_addr dasm_put(Dst, 3738, (ptrdiff_t)(found_exit_addr)); #line 5966 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jle >9 // NOT FOUND dasm_put(Dst, 3742); #line 5968 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_LONG|MAY_BE_STRING))) { if (op2_info & (MAY_BE_LONG|MAY_BE_STRING)) { //|.cold_code dasm_put(Dst, 289); #line 5974 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|3: dasm_put(Dst, 346); #line 5975 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (type != BP_VAR_RW) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 5978 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ZVAL_ADDR FCARG2a, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 5980 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" switch (type) { case BP_VAR_R: //|.if X64 //| LOAD_ZVAL_ADDR CARG3, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 3303, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 3311, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 5984 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ZVAL_ADDR res_addr, r0 //|.endif //| EXT_CALL zend_jit_fetch_dim_r_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_dim_r_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_dim_r_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_dim_r_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_dim_r_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_r_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_r_helper))>>32)); } dasm_put(Dst, 59); } #line 5989 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) //| add r4, 12 //|.endif //| jmp >9 dasm_put(Dst, 3591); #line 5993 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case BP_JIT_IS: //| EXT_CALL zend_jit_fetch_dim_isset_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_dim_isset_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_dim_isset_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_dim_isset_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_dim_isset_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_isset_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_isset_helper))>>32)); } dasm_put(Dst, 59); } #line 5996 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test r0, r0 dasm_put(Dst, 3529); #line 5997 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (not_found_exit_addr) { //| je ¬_found_exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(not_found_exit_addr)); #line 5999 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op2_info & (MAY_BE_LONG|MAY_BE_STRING)) { //| jmp >8 dasm_put(Dst, 3676); #line 6001 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (found_exit_addr) { //| jne &found_exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(found_exit_addr)); #line 6004 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op2_info & (MAY_BE_LONG|MAY_BE_STRING)) { //| jmp >9 dasm_put(Dst, 3591); #line 6006 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| jne >8 //| jmp >9 dasm_put(Dst, 3747); #line 6010 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case BP_VAR_IS: case BP_VAR_UNSET: //|.if X64 //| LOAD_ZVAL_ADDR CARG3, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 3303, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 3311, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 6016 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ZVAL_ADDR res_addr, r0 //|.endif //| EXT_CALL zend_jit_fetch_dim_is_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_dim_is_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_dim_is_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_dim_is_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_dim_is_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_is_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_is_helper))>>32)); } dasm_put(Dst, 59); } #line 6021 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) //| add r4, 12 //|.endif //| jmp >9 dasm_put(Dst, 3591); #line 6025 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case BP_VAR_RW: //| EXT_CALL zend_jit_fetch_dim_rw_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_dim_rw_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_dim_rw_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_dim_rw_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_dim_rw_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_rw_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_rw_helper))>>32)); } dasm_put(Dst, 59); } #line 6028 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test r0, r0 //| jne >8 //| jmp >9 dasm_put(Dst, 3756); #line 6031 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case BP_VAR_W: //| EXT_CALL zend_jit_fetch_dim_w_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_dim_w_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_dim_w_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_dim_w_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_dim_w_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_w_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_w_helper))>>32)); } dasm_put(Dst, 59); } #line 6034 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test r0, r0 //| jne >8 //| jmp >9 dasm_put(Dst, 3756); #line 6037 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; default: ZEND_UNREACHABLE(); } if (op2_info & (MAY_BE_LONG|MAY_BE_STRING)) { //|.code dasm_put(Dst, 386); #line 6043 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } return 1; } static int zend_jit_simple_assign(dasm_State **Dst, const zend_op *opline, zend_jit_addr var_addr, uint32_t var_info, uint32_t var_def_info, zend_uchar val_type, zend_jit_addr val_addr, uint32_t val_info, zend_jit_addr res_addr, int in_cold, int save_r1, bool check_exception) /* Labels: 1,2,3 */ { zend_reg tmp_reg; if (Z_MODE(var_addr) == IS_REG || Z_REG(var_addr) != ZREG_R0) { tmp_reg = ZREG_R0; } else { /* ASSIGN_DIM */ tmp_reg = ZREG_FCARG1; } if (Z_MODE(val_addr) == IS_CONST_ZVAL) { zval *zv = Z_ZV(val_addr); if (!res_addr) { //| ZVAL_COPY_CONST var_addr, var_info, var_def_info, zv, tmp_reg if (Z_TYPE_P(zv) > IS_TRUE) { if (Z_TYPE_P(zv) == IS_DOUBLE) { zend_reg dst_reg = (Z_MODE(var_addr) == IS_REG) ? Z_REG(var_addr) : ZREG_XMM0; if (Z_DVAL_P(zv) == 0.0 && !is_signed(Z_DVAL_P(zv))) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } else if (!IS_SIGNED_32BIT(zv)) { dasm_put(Dst, 1658, (tmp_reg), (unsigned int)(((uintptr_t)zv)), (unsigned int)((((uintptr_t)zv))>>32)); if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (dst_reg-ZREG_XMM0), (tmp_reg), 0); } else { dasm_put(Dst, 1907, (dst_reg-ZREG_XMM0), (tmp_reg), 0); } } else { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); } else { dasm_put(Dst, 1867, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); } } if (Z_MODE(var_addr) == IS_REG) { if (dst_reg != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (dst_reg-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (dst_reg-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else if (Z_TYPE_P(zv) == IS_LONG && var_def_info == MAY_BE_DOUBLE) { zend_reg dst_reg = (Z_MODE(var_addr) == IS_REG) ? Z_REG(var_addr) : ZREG_XMM0; if (Z_LVAL_P(zv) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(zv)); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (ZREG_R0)); } else { dasm_put(Dst, 2659, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (ZREG_R0)); } } if (Z_MODE(var_addr) == IS_REG) { if (dst_reg != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (dst_reg-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (dst_reg-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else if (Z_LVAL_P(zv) == 0 && Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1650, (Z_REG(var_addr)), (Z_REG(var_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1658, (Z_REG(var_addr)), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); } else { dasm_put(Dst, 1658, (tmp_reg), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (tmp_reg), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else { if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1665, (Z_REG(var_addr)), Z_LVAL_P(zv)); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3768, (Z_REG(var_addr)), Z_OFFSET(var_addr), Z_LVAL_P(zv)); } } } } if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if (var_def_info == MAY_BE_DOUBLE) { if ((var_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != MAY_BE_DOUBLE) { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); } } else if (((var_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (1<<Z_TYPE_P(zv))) || (var_info & (MAY_BE_STRING|MAY_BE_ARRAY)) != 0) { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), Z_TYPE_INFO_P(zv)); } } #line 6077 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| ZVAL_COPY_CONST_2 var_addr, res_addr, var_info, var_def_info, zv, tmp_reg if (Z_TYPE_P(zv) > IS_TRUE) { if (Z_TYPE_P(zv) == IS_DOUBLE) { zend_reg dst_reg = (Z_MODE(var_addr) == IS_REG) ? Z_REG(var_addr) : ((Z_MODE(res_addr) == IS_REG) ? Z_REG(res_addr) : ZREG_XMM0); if (Z_DVAL_P(zv) == 0.0 && !is_signed(Z_DVAL_P(zv))) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } else if (!IS_SIGNED_32BIT(zv)) { dasm_put(Dst, 1658, (tmp_reg), (unsigned int)(((uintptr_t)zv)), (unsigned int)((((uintptr_t)zv))>>32)); if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (dst_reg-ZREG_XMM0), (tmp_reg), 0); } else { dasm_put(Dst, 1907, (dst_reg-ZREG_XMM0), (tmp_reg), 0); } } else { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); } else { dasm_put(Dst, 1867, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); } } if (Z_MODE(var_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_TYPE_P(zv) == IS_LONG && var_def_info == MAY_BE_DOUBLE) { if (Z_MODE(var_addr) == IS_REG) { if (Z_LVAL_P(zv) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(zv)); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0), (ZREG_R0)); } else { dasm_put(Dst, 2659, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0), (ZREG_R0)); } } if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(var_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_LVAL_P(zv) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(zv)); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0), (ZREG_R0)); } else { dasm_put(Dst, 2659, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0), (ZREG_R0)); } } if (Z_MODE(var_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else { if (Z_LVAL_P(zv) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (ZREG_XMM0-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (ZREG_XMM0-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(zv)); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (ZREG_XMM0-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0), (ZREG_R0)); } else { dasm_put(Dst, 2659, (ZREG_XMM0-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0), (ZREG_R0)); } } if (Z_MODE(var_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (Z_LVAL_P(zv) == 0 && (Z_MODE(var_addr) == IS_REG || Z_MODE(res_addr) == IS_REG)) { if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1650, (Z_REG(var_addr)), (Z_REG(var_addr))); if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(var_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(var_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } else { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(res_addr)), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(res_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1658, (Z_REG(var_addr)), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(var_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(var_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } else if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(res_addr)), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(res_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } else { dasm_put(Dst, 1658, (tmp_reg), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (tmp_reg), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (tmp_reg), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1665, (Z_REG(var_addr)), Z_LVAL_P(zv)); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3768, (Z_REG(var_addr)), Z_OFFSET(var_addr), Z_LVAL_P(zv)); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(var_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(var_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(zv)); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3768, (Z_REG(res_addr)), Z_OFFSET(res_addr), Z_LVAL_P(zv)); } if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(res_addr)), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(res_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } else { if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1665, (Z_REG(var_addr)), Z_LVAL_P(zv)); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3768, (Z_REG(var_addr)), Z_OFFSET(var_addr), Z_LVAL_P(zv)); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(zv)); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3768, (Z_REG(res_addr)), Z_OFFSET(res_addr), Z_LVAL_P(zv)); } } } } if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if (var_def_info == MAY_BE_DOUBLE) { if ((var_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != MAY_BE_DOUBLE) { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); } } else if (((var_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (1<<Z_TYPE_P(zv))) || (var_info & (MAY_BE_STRING|MAY_BE_ARRAY)) != 0) { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), Z_TYPE_INFO_P(zv)); } } if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (var_def_info == MAY_BE_DOUBLE) { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), Z_TYPE_INFO_P(zv)); } } #line 6079 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_REFCOUNTED_P(zv)) { if (!res_addr) { //| ADDREF_CONST zv, Ra(tmp_reg) if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 3777, (tmp_reg), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32), (tmp_reg), 0); } else { dasm_put(Dst, 3792, Z_LVAL_P(zv)); } #line 6083 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| ADDREF_CONST_2 zv, Ra(tmp_reg) if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 3798, (tmp_reg), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32), (tmp_reg), 0); } else { dasm_put(Dst, 3813, Z_LVAL_P(zv)); } #line 6085 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else { if (val_info & MAY_BE_UNDEF) { if (in_cold) { //| IF_NOT_ZVAL_TYPE val_addr, IS_UNDEF, >2 ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2131, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_UNDEF); #line 6091 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_ZVAL_TYPE val_addr, IS_UNDEF, >1 ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); #line 6093 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 3819, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_UNDEF); #line 6094 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 6095 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(CV_DEF_OF(EX_VAR_TO_NUM(opline->op1.var)))); if (save_r1) { //| mov aword T1, FCARG1a // save dasm_put(Dst, 3833); #line 6099 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_ZVAL_TYPE_INFO var_addr, IS_NULL ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), IS_NULL); #line 6101 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (res_addr) { //| SET_ZVAL_TYPE_INFO res_addr, IS_NULL ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); #line 6103 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline) { //| SET_EX_OPLINE opline, Ra(tmp_reg) if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 3838, (tmp_reg), (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), (tmp_reg), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 6106 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL && Z_REG(val_addr) == ZREG_FP); //| mov FCARG1d, Z_OFFSET(val_addr) //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 2217, Z_OFFSET(val_addr)); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 6110 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (check_exception) { //| test r0, r0 //| jz ->exception_handler_undef dasm_put(Dst, 3852); #line 6113 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (save_r1) { //| mov FCARG1a, aword T1 // restore dasm_put(Dst, 3860); #line 6116 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jmp >3 dasm_put(Dst, 3865); #line 6118 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (in_cold) { //|2: dasm_put(Dst, 1944); #line 6120 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //|.code dasm_put(Dst, 386); #line 6122 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (val_info & MAY_BE_REF) { if (val_type == IS_CV) { ZEND_ASSERT(Z_REG(var_addr) != ZREG_R2); if (Z_MODE(val_addr) != IS_MEM_ZVAL || Z_REG(val_addr) != ZREG_R2 || Z_OFFSET(val_addr) != 0) { //| LOAD_ZVAL_ADDR r2, val_addr if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(val_addr)) { dasm_put(Dst, 3303, (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 3311, (Z_REG(val_addr))); } } else { ZEND_UNREACHABLE(); } #line 6129 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| ZVAL_DEREF r2, val_info if (val_info & MAY_BE_REF) { dasm_put(Dst, 3870, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 6131 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R2, 0); } else { zend_jit_addr ref_addr; zend_reg type_reg = tmp_reg; if (in_cold) { //| IF_NOT_ZVAL_TYPE val_addr, IS_REFERENCE, >1 ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); #line 6138 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_ZVAL_TYPE val_addr, IS_REFERENCE, >1 ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); #line 6140 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 3819, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); #line 6141 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 6142 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // zend_refcounted *ref = Z_COUNTED_P(retval_ptr); //| GET_ZVAL_PTR r2, val_addr ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); #line 6145 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_DELREF r2 //| // ZVAL_COPY_VALUE(return_value, &ref->value); dasm_put(Dst, 3888, (Z_REG(val_addr)), Z_OFFSET(val_addr)); #line 6147 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R2, 8); if (!res_addr) { //| ZVAL_COPY_VALUE var_addr, var_info, ref_addr, val_info, type_reg, tmp_reg if (val_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((val_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(ref_addr) == IS_REG) { if (Z_MODE(var_addr) != IS_REG || Z_REG(var_addr) != Z_REG(ref_addr)) { if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(ref_addr)), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(ref_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(ref_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(var_addr)), (Z_REG(var_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { dasm_put(Dst, 1658, (Z_REG(var_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(ref_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(ref_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(var_addr)), Z_LVAL_P(Z_ZV(ref_addr))); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(var_addr)), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else if (Z_MODE(ref_addr) == IS_REG) { if (Z_REG(var_addr) != Z_REG(ref_addr)) { dasm_put(Dst, 1682, (Z_REG(ref_addr)), (Z_REG(var_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(ref_addr)) == 0) { dasm_put(Dst, 1650, (tmp_reg), (tmp_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { dasm_put(Dst, 1658, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(ref_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(ref_addr)))>>32)); } else { dasm_put(Dst, 1665, (tmp_reg), Z_LVAL_P(Z_ZV(ref_addr))); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (tmp_reg), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else if (Z_MODE(ref_addr) == IS_REG) { if (tmp_reg != Z_REG(ref_addr)) { dasm_put(Dst, 1682, (Z_REG(ref_addr)), (tmp_reg)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (tmp_reg), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else if ((val_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(ref_addr) == IS_REG) { if (Z_MODE(var_addr) == IS_REG) { if (Z_REG(ref_addr) != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(ref_addr) != IS_REG || Z_REG(var_addr) != Z_REG(ref_addr)) { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(ref_addr)); } else { dasm_put(Dst, 1867, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(ref_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(ref_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(var_addr)-ZREG_XMM0)); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { dasm_put(Dst, 1907, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } else if (Z_MODE(ref_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(ref_addr) != IS_REG || ZREG_XMM0 != Z_REG(ref_addr)) { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(ref_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } else if (Z_MODE(ref_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(var_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } } else if (!(val_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (tmp_reg), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (tmp_reg), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } if ((val_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(val_info & MAY_BE_GUARD) && has_concrete_type(val_info & MAY_BE_ANY)) { if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if ((var_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (val_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(val_info); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (type_reg), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (type_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info)); } #line 6150 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| ZVAL_COPY_VALUE_2 var_addr, var_info, res_addr, ref_addr, val_info, type_reg, tmp_reg if (val_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((val_info & MAY_BE_ANY) == MAY_BE_LONG) { if (Z_MODE(ref_addr) == IS_REG) { if (Z_MODE(var_addr) != IS_REG || Z_REG(var_addr) != Z_REG(ref_addr)) { if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(ref_addr)), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(ref_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(ref_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(ref_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(ref_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(ref_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(var_addr)), (Z_REG(var_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { dasm_put(Dst, 1658, (Z_REG(var_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(ref_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(ref_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(var_addr)), Z_LVAL_P(Z_ZV(ref_addr))); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(var_addr)), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else if (Z_MODE(ref_addr) == IS_REG) { if (Z_REG(var_addr) != Z_REG(ref_addr)) { dasm_put(Dst, 1682, (Z_REG(ref_addr)), (Z_REG(var_addr))); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(var_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(var_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(var_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(ref_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(ref_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(ref_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(ref_addr))); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else if (Z_MODE(ref_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(ref_addr)) { dasm_put(Dst, 1682, (Z_REG(ref_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(res_addr)), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(res_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } else { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(ref_addr)) == 0) { dasm_put(Dst, 1650, (tmp_reg), (tmp_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { dasm_put(Dst, 1658, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(ref_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(ref_addr)))>>32)); } else { dasm_put(Dst, 1665, (tmp_reg), Z_LVAL_P(Z_ZV(ref_addr))); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (tmp_reg), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else if (Z_MODE(ref_addr) == IS_REG) { if (tmp_reg != Z_REG(ref_addr)) { dasm_put(Dst, 1682, (Z_REG(ref_addr)), (tmp_reg)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (tmp_reg), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (tmp_reg), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((val_info & MAY_BE_ANY) == MAY_BE_DOUBLE) { if (Z_MODE(ref_addr) == IS_REG) { if (Z_MODE(var_addr) == IS_REG) { if (Z_REG(ref_addr) != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(ref_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(ref_addr) != IS_REG || Z_REG(var_addr) != Z_REG(ref_addr)) { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(ref_addr)); } else { dasm_put(Dst, 1867, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(ref_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(ref_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(var_addr)-ZREG_XMM0)); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { dasm_put(Dst, 1907, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } else if (Z_MODE(ref_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(var_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(ref_addr) != IS_REG || Z_REG(res_addr) != Z_REG(ref_addr)) { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(ref_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(ref_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(ref_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } else if (Z_MODE(ref_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(var_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else { if (Z_MODE(ref_addr) != IS_REG || ZREG_XMM0 != Z_REG(ref_addr)) { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(ref_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } else if (Z_MODE(ref_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(var_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(val_info & MAY_BE_DOUBLE)) { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (tmp_reg), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (tmp_reg), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((val_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && has_concrete_type(val_info & MAY_BE_ANY)) { zend_uchar type = concrete_type(val_info); if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if ((var_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (val_info & (MAY_BE_ANY|MAY_BE_UNDEF))) { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), type); } } if (Z_MODE(res_addr) == IS_MEM_ZVAL) { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (type_reg), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (type_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (type_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 6152 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| je >2 dasm_put(Dst, 1929); #line 6154 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (tmp_reg == ZREG_R0) { //| IF_NOT_REFCOUNTED ah, >3 dasm_put(Dst, 3899); #line 6156 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_FLAGS Rd(tmp_reg), (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT), >3 dasm_put(Dst, 3906, (tmp_reg), (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)); #line 6158 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| GET_ZVAL_PTR Ra(tmp_reg), var_addr ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); #line 6160 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!res_addr) { //| GC_ADDREF Ra(tmp_reg) dasm_put(Dst, 3783, (tmp_reg), 0); #line 6163 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| add dword [Ra(tmp_reg)], 2 dasm_put(Dst, 3804, (tmp_reg), 0); #line 6165 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jmp >3 //|2: dasm_put(Dst, 3918); #line 6168 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (res_addr) { if (tmp_reg == ZREG_R0) { //| IF_NOT_REFCOUNTED ah, >2 dasm_put(Dst, 3925); #line 6171 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_FLAGS Rd(tmp_reg), (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT), >2 dasm_put(Dst, 3932, (tmp_reg), (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)); #line 6173 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| GET_ZVAL_PTR Ra(tmp_reg), var_addr ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); #line 6175 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_ADDREF Ra(tmp_reg) //|2: dasm_put(Dst, 3944, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr), (tmp_reg), 0); #line 6177 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (save_r1) { //| mov aword T1, FCARG1a // save dasm_put(Dst, 3833); #line 6180 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EFREE_REFERENCE r2 dasm_put(Dst, 3964); #if ZEND_DEBUG dasm_put(Dst, 3968); if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } #else #ifdef HAVE_BUILTIN_CONSTANT_P if (MAY_USE_32BIT_ADDR(_efree_32)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree_32)); } else { if (IS_SIGNED_32BIT(_efree_32)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree_32)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree_32)), (unsigned int)((((ptrdiff_t)_efree_32))>>32)); } dasm_put(Dst, 59); } #else if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } #endif #endif #line 6182 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (save_r1) { //| mov FCARG1a, aword T1 // restore dasm_put(Dst, 3860); #line 6184 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jmp >3 dasm_put(Dst, 3865); #line 6186 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (in_cold) { //|1: dasm_put(Dst, 63); #line 6188 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //|.code dasm_put(Dst, 386); #line 6190 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } if (!res_addr) { //| ZVAL_COPY_VALUE var_addr, var_info, val_addr, val_info, ZREG_R2, tmp_reg if (val_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((val_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(var_addr) != IS_REG || Z_REG(var_addr) != Z_REG(val_addr)) { if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(val_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(var_addr)), (Z_REG(var_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (Z_REG(var_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(var_addr)), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(var_addr)), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (Z_REG(var_addr) != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(var_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (tmp_reg), (tmp_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (tmp_reg), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (tmp_reg), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (tmp_reg != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (tmp_reg)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (tmp_reg), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else if ((val_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(var_addr) == IS_REG) { if (Z_REG(val_addr) != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(val_addr) != IS_REG || Z_REG(var_addr) != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(var_addr)-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(val_addr) != IS_REG || ZREG_XMM0 != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(var_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } } else if (!(val_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (tmp_reg), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (tmp_reg), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } if ((val_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(val_info & MAY_BE_GUARD) && has_concrete_type(val_info & MAY_BE_ANY)) { if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if ((var_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (val_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(val_info); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info)); } #line 6196 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| ZVAL_COPY_VALUE_2 var_addr, var_info, res_addr, val_addr, val_info, ZREG_R2, tmp_reg if (val_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((val_info & MAY_BE_ANY) == MAY_BE_LONG) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(var_addr) != IS_REG || Z_REG(var_addr) != Z_REG(val_addr)) { if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(val_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(val_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(val_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(var_addr)), (Z_REG(var_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (Z_REG(var_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(var_addr)), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(var_addr)), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (Z_REG(var_addr) != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(var_addr))); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(var_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(var_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(var_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(res_addr)), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(res_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } else { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (tmp_reg), (tmp_reg)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (tmp_reg), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (tmp_reg), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (tmp_reg), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (tmp_reg != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (tmp_reg)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (tmp_reg), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (tmp_reg), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((val_info & MAY_BE_ANY) == MAY_BE_DOUBLE) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(var_addr) == IS_REG) { if (Z_REG(val_addr) != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(val_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(val_addr) != IS_REG || Z_REG(var_addr) != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(var_addr)-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(var_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(val_addr) != IS_REG || Z_REG(res_addr) != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(var_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else { if (Z_MODE(val_addr) != IS_REG || ZREG_XMM0 != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(var_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(val_info & MAY_BE_DOUBLE)) { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (tmp_reg), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (tmp_reg), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((val_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && has_concrete_type(val_info & MAY_BE_ANY)) { zend_uchar type = concrete_type(val_info); if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if ((var_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (val_info & (MAY_BE_ANY|MAY_BE_UNDEF))) { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), type); } } if (Z_MODE(res_addr) == IS_MEM_ZVAL) { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 6198 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (val_type == IS_CV) { if (!res_addr) { //| TRY_ADDREF val_info, dh, Ra(tmp_reg) if (val_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (val_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 3981); } dasm_put(Dst, 3989, (tmp_reg), 0); } #line 6203 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| TRY_ADDREF_2 val_info, dh, Ra(tmp_reg) if (val_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (val_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 3981); } dasm_put(Dst, 4000, (tmp_reg), 0); } #line 6205 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (res_addr) { //| TRY_ADDREF val_info, dh, Ra(tmp_reg) if (val_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (val_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 3981); } dasm_put(Dst, 3989, (tmp_reg), 0); } #line 6209 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //|3: dasm_put(Dst, 346); #line 6212 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_assign_to_typed_ref(dasm_State **Dst, const zend_op *opline, zend_uchar val_type, zend_jit_addr val_addr, zend_jit_addr res_addr, bool check_exception) { //| // if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(variable_ptr)))) { //| cmp aword [FCARG1a + offsetof(zend_reference, sources.ptr)], 0 //| jnz >2 //|.cold_code dasm_put(Dst, 4011, offsetof(zend_reference, sources.ptr)); #line 6227 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 6228 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(val_addr) != IS_MEM_ZVAL || Z_REG(val_addr) != ZREG_FCARG2 || Z_OFFSET(val_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG2a, val_addr if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(val_addr)) { dasm_put(Dst, 2255, (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 2263, (Z_REG(val_addr))); } } else { ZEND_UNREACHABLE(); } #line 6230 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 6233 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (val_type == IS_CONST) { //| EXT_CALL zend_jit_assign_const_to_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_const_to_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_const_to_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_const_to_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_const_to_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_const_to_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_assign_const_to_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 6236 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (val_type == IS_TMP_VAR) { //| EXT_CALL zend_jit_assign_tmp_to_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_tmp_to_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_tmp_to_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_tmp_to_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_tmp_to_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_tmp_to_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_assign_tmp_to_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 6238 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (val_type == IS_VAR) { //| EXT_CALL zend_jit_assign_var_to_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_var_to_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_var_to_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_var_to_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_var_to_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_var_to_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_assign_var_to_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 6240 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (val_type == IS_CV) { //| EXT_CALL zend_jit_assign_cv_to_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_cv_to_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_cv_to_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_cv_to_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_cv_to_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_cv_to_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_assign_cv_to_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 6242 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } if (res_addr) { zend_jit_addr ret_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0); //| ZVAL_COPY_VALUE res_addr, -1, ret_addr, -1, ZREG_R1, ZREG_R2 if (-1 & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((-1 & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(ret_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(ret_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(ret_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(ret_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(ret_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(ret_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ret_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(ret_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(ret_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(ret_addr))); } } } else if (Z_MODE(ret_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else if (Z_MODE(ret_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(ret_addr)) { dasm_put(Dst, 1682, (Z_REG(ret_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(ret_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(ret_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ret_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(ret_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(ret_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(ret_addr))); } } } else if (Z_MODE(ret_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else if (Z_MODE(ret_addr) == IS_REG) { if (ZREG_R2 != Z_REG(ret_addr)) { dasm_put(Dst, 1682, (Z_REG(ret_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((-1 & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(ret_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(ret_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ret_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ret_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(ret_addr) != IS_REG || Z_REG(res_addr) != Z_REG(ret_addr)) { if (Z_MODE(ret_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(ret_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(ret_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(ret_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(ret_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(ret_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(ret_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ret_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(ret_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } else if (Z_MODE(ret_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ret_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ret_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(ret_addr) != IS_REG || ZREG_XMM0 != Z_REG(ret_addr)) { if (Z_MODE(ret_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(ret_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ret_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ret_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(ret_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(ret_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(ret_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ret_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(ret_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } else if (Z_MODE(ret_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(-1 & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((-1 & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(-1 & MAY_BE_GUARD) && has_concrete_type(-1 & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((-1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (-1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(-1); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R1), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 6249 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| TRY_ADDREF -1, ch, r2 if (-1 & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (-1 & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 2104); } dasm_put(Dst, 2112); } #line 6250 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (check_exception) { //| // if (UNEXPECTED(EG(exception) != NULL)) { //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.exception)) { dasm_put(Dst, 71, &executor_globals.exception); } else { dasm_put(Dst, 78, (unsigned int)(((ptrdiff_t)&executor_globals.exception)), (unsigned int)((((ptrdiff_t)&executor_globals.exception))>>32)); } #line 6254 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| je >8 // END OF zend_jit_assign_to_variable() //| jmp ->exception_handler dasm_put(Dst, 4022); #line 6256 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >8 dasm_put(Dst, 3676); #line 6258 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code dasm_put(Dst, 386); #line 6260 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_assign_to_variable_call(dasm_State **Dst, const zend_op *opline, zend_jit_addr __var_use_addr, zend_jit_addr var_addr, uint32_t __var_info, uint32_t __var_def_info, zend_uchar val_type, zend_jit_addr val_addr, uint32_t val_info, zend_jit_addr __res_addr, bool __check_exception) { if (val_info & MAY_BE_UNDEF) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_ZVAL_TYPE val_addr, IS_UNDEF, &exit_addr ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4031, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_UNDEF, (ptrdiff_t)(exit_addr)); #line 6286 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_ZVAL_TYPE val_addr, IS_UNDEF, >1 ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); #line 6288 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 3819, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_UNDEF); #line 6289 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 6290 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" ZEND_ASSERT(Z_REG(val_addr) == ZREG_FP); if (Z_REG(var_addr) != ZREG_FP) { //| mov aword T1, Ra(Z_REG(var_addr)) // save dasm_put(Dst, 3426, (Z_REG(var_addr))); #line 6293 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 6295 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1d, Z_OFFSET(val_addr) //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 2217, Z_OFFSET(val_addr)); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 6297 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(var_addr) != ZREG_FP) { //| mov Ra(Z_REG(var_addr)), aword T1 // restore dasm_put(Dst, 3448, (Z_REG(var_addr))); #line 6299 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_MODE(var_addr) != IS_MEM_ZVAL || Z_REG(var_addr) != ZREG_FCARG1 || Z_OFFSET(var_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, var_addr if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(var_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(var_addr)) { dasm_put(Dst, 2220, (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 2228, (Z_REG(var_addr))); } } else { ZEND_UNREACHABLE(); } #line 6302 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ADDR_ZTS FCARG2a, executor_globals, uninitialized_zval if (IS_SIGNED_32BIT(&executor_globals.uninitialized_zval)) { dasm_put(Dst, 712, ((ptrdiff_t)&executor_globals.uninitialized_zval)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)&executor_globals.uninitialized_zval)), (unsigned int)((((ptrdiff_t)&executor_globals.uninitialized_zval))>>32)); } #line 6304 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| call ->assign_const //| jmp >9 //|.code dasm_put(Dst, 4043); #line 6307 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (Z_MODE(var_addr) != IS_MEM_ZVAL || Z_REG(var_addr) != ZREG_FCARG1 || Z_OFFSET(var_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, var_addr if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(var_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(var_addr)) { dasm_put(Dst, 2220, (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 2228, (Z_REG(var_addr))); } } else { ZEND_UNREACHABLE(); } #line 6311 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_MODE(val_addr) != IS_MEM_ZVAL || Z_REG(val_addr) != ZREG_FCARG2 || Z_OFFSET(val_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG2a, val_addr if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(val_addr)) { dasm_put(Dst, 2255, (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 2263, (Z_REG(val_addr))); } } else { ZEND_UNREACHABLE(); } #line 6314 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 6317 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!(val_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) { //| call ->assign_tmp dasm_put(Dst, 4052); #line 6320 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (val_type == IS_CONST) { //| call ->assign_const dasm_put(Dst, 4056); #line 6322 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (val_type == IS_TMP_VAR) { //| call ->assign_tmp dasm_put(Dst, 4052); #line 6324 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (val_type == IS_VAR) { if (!(val_info & MAY_BE_REF)) { //| call ->assign_tmp dasm_put(Dst, 4052); #line 6327 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| call ->assign_var dasm_put(Dst, 4060); #line 6329 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (val_type == IS_CV) { if (!(val_info & MAY_BE_REF)) { //| call ->assign_cv_noref dasm_put(Dst, 4064); #line 6333 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| call ->assign_cv dasm_put(Dst, 4068); #line 6335 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if ((val_info & MAY_BE_UNDEF) && JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE) { //|9: dasm_put(Dst, 4072); #line 6338 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { ZEND_UNREACHABLE(); } return 1; } static int zend_jit_assign_to_variable(dasm_State **Dst, const zend_op *opline, zend_jit_addr var_use_addr, zend_jit_addr var_addr, uint32_t var_info, uint32_t var_def_info, zend_uchar val_type, zend_jit_addr val_addr, uint32_t val_info, zend_jit_addr res_addr, bool check_exception) /* Labels: 1,2,3,4,5,8 */ { int done = 0; zend_reg ref_reg, tmp_reg; if (Z_MODE(var_addr) == IS_REG || Z_REG(var_use_addr) != ZREG_R0) { ref_reg = ZREG_FCARG1; tmp_reg = ZREG_R0; } else { /* ASSIGN_DIM */ ref_reg = ZREG_R0; tmp_reg = ZREG_FCARG1; } if (var_info & MAY_BE_REF) { if (Z_MODE(var_use_addr) != IS_MEM_ZVAL || Z_REG(var_use_addr) != ref_reg || Z_OFFSET(var_use_addr) != 0) { //| LOAD_ZVAL_ADDR Ra(ref_reg), var_use_addr if (Z_MODE(var_use_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(var_use_addr))) { dasm_put(Dst, 1665, (ref_reg), ((ptrdiff_t)Z_ZV(var_use_addr))); } else { dasm_put(Dst, 1658, (ref_reg), (unsigned int)(((ptrdiff_t)Z_ZV(var_use_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_use_addr)))>>32)); } } else if (Z_MODE(var_use_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(var_use_addr)) { dasm_put(Dst, 2375, (ref_reg), (Z_REG(var_use_addr)), Z_OFFSET(var_use_addr)); } else { dasm_put(Dst, 1682, (Z_REG(var_use_addr)), (ref_reg)); } } else { ZEND_UNREACHABLE(); } #line 6374 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" var_addr = var_use_addr = ZEND_ADDR_MEM_ZVAL(ref_reg, 0); } //| // if (Z_ISREF_P(variable_ptr)) { //| IF_NOT_Z_TYPE, Ra(ref_reg), IS_REFERENCE, >3 //| // if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(variable_ptr)))) { //| GET_Z_PTR FCARG1a, Ra(ref_reg) dasm_put(Dst, 4075, (ref_reg), offsetof(zval, u1.v.type), IS_REFERENCE, (ref_reg), 0); #line 6380 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_assign_to_typed_ref(Dst, opline, val_type, val_addr, res_addr, check_exception)) { return 0; } //| lea Ra(ref_reg), [FCARG1a + offsetof(zend_reference, val)] //|3: dasm_put(Dst, 4095, (ref_reg), offsetof(zend_reference, val)); #line 6385 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (var_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (RC_MAY_BE_1(var_info)) { int in_cold = 0; if (var_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| IF_ZVAL_REFCOUNTED var_use_addr, >1 ZEND_ASSERT(Z_MODE(var_use_addr) == IS_MEM_ZVAL); #line 6392 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 276, (Z_REG(var_use_addr)), Z_OFFSET(var_use_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); #line 6393 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 6394 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" in_cold = 1; } if (Z_REG(var_use_addr) == ZREG_FCARG1 || Z_REG(var_use_addr) == ZREG_R0) { bool keep_gc = 0; //| GET_ZVAL_PTR Ra(tmp_reg), var_use_addr ZEND_ASSERT(Z_MODE(var_use_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (tmp_reg), (Z_REG(var_use_addr)), Z_OFFSET(var_use_addr)); #line 6400 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (tmp_reg == ZREG_FCARG1) { if (Z_MODE(val_addr) == IS_REG) { keep_gc = 1; } else if ((val_info & ((MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_GUARD)-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) == 0) { keep_gc = 1; } else if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (sizeof(void*) == 4) { keep_gc = 1; } else { zval *zv = Z_ZV(val_addr); if (Z_TYPE_P(zv) == IS_DOUBLE) { if (Z_DVAL_P(zv) == 0 || IS_SIGNED_32BIT(zv)) { keep_gc = 1; } } else if (IS_SIGNED_32BIT(Z_LVAL_P(zv))) { keep_gc = 1; } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if ((val_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { keep_gc = 1; } } } if (!keep_gc) { //| mov aword T1, Ra(tmp_reg) // save dasm_put(Dst, 3426, (tmp_reg)); #line 6427 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!zend_jit_simple_assign(Dst, opline, var_addr, var_info, var_def_info, val_type, val_addr, val_info, res_addr, in_cold, 0, 0)) { return 0; } if (!keep_gc) { //| mov FCARG1a, aword T1 // restore dasm_put(Dst, 3860); #line 6433 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| GET_ZVAL_PTR FCARG1a, var_use_addr ZEND_ASSERT(Z_MODE(var_use_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(var_use_addr)), Z_OFFSET(var_use_addr)); #line 6436 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_simple_assign(Dst, opline, var_addr, var_info, var_def_info, val_type, val_addr, val_info, res_addr, in_cold, 1, 0)) { return 0; } } //| GC_DELREF FCARG1a dasm_put(Dst, 312); #line 6441 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (RC_MAY_BE_N(var_info) && (var_info & (MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0) { //| jnz >4 dasm_put(Dst, 321); #line 6443 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jnz >8 dasm_put(Dst, 3600); #line 6445 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| ZVAL_DTOR_FUNC var_info, opline do { if (!((var_info) & MAY_BE_GUARD) && has_concrete_type((var_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((var_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((var_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((var_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); #line 6447 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (in_cold || (RC_MAY_BE_N(var_info) && (var_info & (MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0)) { if (check_exception && !(val_info & MAY_BE_UNDEF)) { //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.exception)) { dasm_put(Dst, 71, &executor_globals.exception); } else { dasm_put(Dst, 78, (unsigned int)(((ptrdiff_t)&executor_globals.exception)), (unsigned int)((((ptrdiff_t)&executor_globals.exception))>>32)); } #line 6450 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| je >8 //| jmp ->exception_handler dasm_put(Dst, 4022); #line 6452 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >8 dasm_put(Dst, 3676); #line 6454 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (RC_MAY_BE_N(var_info) && (var_info & (MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0) { //|4: //| IF_GC_MAY_NOT_LEAK FCARG1a, >8 //| EXT_CALL gc_possible_root, r0 dasm_put(Dst, 4105, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } #line 6460 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (in_cold) { //| jmp >8 dasm_put(Dst, 3676); #line 6462 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (check_exception && (val_info & MAY_BE_UNDEF)) { //|8: //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 dasm_put(Dst, 4117); if (IS_SIGNED_32BIT(&executor_globals.exception)) { dasm_put(Dst, 71, &executor_globals.exception); } else { dasm_put(Dst, 78, (unsigned int)(((ptrdiff_t)&executor_globals.exception)), (unsigned int)((((ptrdiff_t)&executor_globals.exception))>>32)); } #line 6467 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| je >8 //| jmp ->exception_handler dasm_put(Dst, 4022); #line 6469 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (in_cold) { //|.code dasm_put(Dst, 386); #line 6472 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { done = 1; } } else /* if (RC_MAY_BE_N(var_info)) */ { if (var_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| IF_NOT_ZVAL_REFCOUNTED var_use_addr, >5 ZEND_ASSERT(Z_MODE(var_use_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4120, (Z_REG(var_use_addr)), Z_OFFSET(var_use_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); #line 6478 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (var_info & (MAY_BE_ARRAY|MAY_BE_OBJECT)) { if (Z_REG(var_use_addr) != ZREG_FP) { //| mov T1, Ra(Z_REG(var_use_addr)) // save dasm_put(Dst, 3426, (Z_REG(var_use_addr))); #line 6482 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| GET_ZVAL_PTR FCARG1a, var_use_addr ZEND_ASSERT(Z_MODE(var_use_addr) == IS_MEM_ZVAL); #line 6484 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_DELREF FCARG1a //| IF_GC_MAY_NOT_LEAK FCARG1a, >5 //| EXT_CALL gc_possible_root, r0 dasm_put(Dst, 4134, (Z_REG(var_use_addr)), Z_OFFSET(var_use_addr), (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } #line 6487 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(var_use_addr) != ZREG_FP) { //| mov Ra(Z_REG(var_use_addr)), T1 // restore dasm_put(Dst, 3448, (Z_REG(var_use_addr))); #line 6489 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| GET_ZVAL_PTR Ra(tmp_reg), var_use_addr ZEND_ASSERT(Z_MODE(var_use_addr) == IS_MEM_ZVAL); #line 6492 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_DELREF Ra(tmp_reg) dasm_put(Dst, 4154, (tmp_reg), (Z_REG(var_use_addr)), Z_OFFSET(var_use_addr), (tmp_reg), 0); #line 6493 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|5: dasm_put(Dst, 498); #line 6495 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!done && !zend_jit_simple_assign(Dst, opline, var_addr, var_info, var_def_info, val_type, val_addr, val_info, res_addr, 0, 0, check_exception)) { return 0; } //|8: dasm_put(Dst, 4117); #line 6503 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t val_info, uint8_t dim_type, int may_throw) { zend_jit_addr op2_addr, op3_addr, res_addr; op2_addr = (opline->op2_type != IS_UNUSED) ? OP2_ADDR() : 0; op3_addr = OP1_DATA_ADDR(); if (opline->result_type == IS_UNUSED) { res_addr = 0; } else { res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); } if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && (val_info & MAY_BE_UNDEF)) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_ZVAL_TYPE op3_addr, IS_UNDEF, &exit_addr ZEND_ASSERT(Z_MODE(op3_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4031, (Z_REG(op3_addr)), Z_OFFSET(op3_addr)+offsetof(zval, u1.v.type), IS_UNDEF, (ptrdiff_t)(exit_addr)); #line 6528 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" val_info &= ~MAY_BE_UNDEF; } if (op1_info & MAY_BE_REF) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 6534 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_NOT_Z_TYPE FCARG1a, IS_REFERENCE, >1 //| GET_Z_PTR FCARG2a, FCARG1a //| IF_NOT_TYPE byte [FCARG2a + offsetof(zend_reference, val) + offsetof(zval, u1.v.type)], IS_ARRAY, >2 //| lea FCARG1a, [FCARG2a + offsetof(zend_reference, val)] //| jmp >3 //|.cold_code dasm_put(Dst, 4172, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val) + offsetof(zval, u1.v.type), IS_ARRAY, offsetof(zend_reference, val)); #line 6540 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 1944); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 6542 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_prepare_assign_dim_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_prepare_assign_dim_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_prepare_assign_dim_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_prepare_assign_dim_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_prepare_assign_dim_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_prepare_assign_dim_ref)), (unsigned int)((((ptrdiff_t)zend_jit_prepare_assign_dim_ref))>>32)); } dasm_put(Dst, 59); } #line 6543 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test r0, r0 //| mov FCARG1a, r0 //| jne >1 //| jmp ->exception_handler_undef //|.code dasm_put(Dst, 4201); #line 6548 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 6549 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } if (op1_info & MAY_BE_ARRAY) { if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - MAY_BE_ARRAY)) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_ARRAY, >7 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4217, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_ARRAY); #line 6555 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|3: //| SEPARATE_ARRAY op1_addr, op1_info, 1 dasm_put(Dst, 346); if (RC_MAY_BE_N(op1_info)) { if (Z_REG(op1_addr) != ZREG_FP) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R0), (ZREG_R0)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R0 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R0)); } } else { ZEND_UNREACHABLE(); } if (RC_MAY_BE_1(op1_info)) { dasm_put(Dst, 4230); } if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } } if (MAY_USE_32BIT_ADDR(zend_jit_zval_array_dup)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_zval_array_dup)); } else { if (IS_SIGNED_32BIT(zend_jit_zval_array_dup)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_zval_array_dup)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_zval_array_dup)), (unsigned int)((((ptrdiff_t)zend_jit_zval_array_dup))>>32)); } dasm_put(Dst, 59); } dasm_put(Dst, 4238); } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } if (RC_MAY_BE_1(op1_info)) { dasm_put(Dst, 4244); if (1) { dasm_put(Dst, 4248); dasm_put(Dst, 63); } else { dasm_put(Dst, 3558); } } ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4254, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); if (MAY_USE_32BIT_ADDR(zend_array_dup)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_dup)); } else { if (IS_SIGNED_32BIT(zend_array_dup)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_dup)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_dup)), (unsigned int)((((ptrdiff_t)zend_array_dup))>>32)); } dasm_put(Dst, 59); } ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4273, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_ARRAY_EX); if (RC_MAY_BE_1(op1_info)) { if (1) { dasm_put(Dst, 2817); } } dasm_put(Dst, 1944); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } } #line 6558 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL)) { if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_ARRAY))) { //| CMP_ZVAL_TYPE op1_addr, IS_NULL ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 6561 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jg >7 dasm_put(Dst, 4285, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_NULL); #line 6562 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // ZVAL_ARR(container, zend_new_array(8)); if (Z_REG(op1_addr) != ZREG_FP) { //| mov T1, Ra(Z_REG(op1_addr)) // save dasm_put(Dst, 3426, (Z_REG(op1_addr))); #line 6566 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL _zend_new_array_0, r0 if (MAY_USE_32BIT_ADDR(_zend_new_array_0)) { dasm_put(Dst, 46, (ptrdiff_t)(_zend_new_array_0)); } else { if (IS_SIGNED_32BIT(_zend_new_array_0)) { dasm_put(Dst, 49, ((ptrdiff_t)_zend_new_array_0)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_zend_new_array_0)), (unsigned int)((((ptrdiff_t)_zend_new_array_0))>>32)); } dasm_put(Dst, 59); } #line 6568 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(op1_addr) != ZREG_FP) { //| mov Ra(Z_REG(op1_addr)), T1 // restore dasm_put(Dst, 3448, (Z_REG(op1_addr))); #line 6570 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_ZVAL_LVAL op1_addr, r0 if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2185, (Z_REG(op1_addr))); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } #line 6572 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO op1_addr, IS_ARRAY_EX ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 6573 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1a, r0 dasm_put(Dst, 4273, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_ARRAY_EX); #line 6574 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_ARRAY)) { //|6: dasm_put(Dst, 3290); #line 6578 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op2_type == IS_UNUSED) { uint32_t var_info = MAY_BE_NULL; zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0); //| // var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval)); //| LOAD_ADDR_ZTS FCARG2a, executor_globals, uninitialized_zval if (IS_SIGNED_32BIT(&executor_globals.uninitialized_zval)) { dasm_put(Dst, 712, ((ptrdiff_t)&executor_globals.uninitialized_zval)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)&executor_globals.uninitialized_zval)), (unsigned int)((((ptrdiff_t)&executor_globals.uninitialized_zval))>>32)); } #line 6584 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_hash_next_index_insert, r0 if (MAY_USE_32BIT_ADDR(zend_hash_next_index_insert)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_next_index_insert)); } else { if (IS_SIGNED_32BIT(zend_hash_next_index_insert)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_next_index_insert)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_next_index_insert)), (unsigned int)((((ptrdiff_t)zend_hash_next_index_insert))>>32)); } dasm_put(Dst, 59); } #line 6585 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // if (UNEXPECTED(!var_ptr)) { //| test r0, r0 //| jz >1 //|.cold_code dasm_put(Dst, 4298); #line 6589 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| // zend_throw_error(NULL, "Cannot add element to the array as the next element is already occupied"); //| CANNOT_ADD_ELEMENT opline dasm_put(Dst, 63); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); dasm_put(Dst, 4307); } else { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } dasm_put(Dst, 4311); } #line 6592 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| //ZEND_VM_C_GOTO(assign_dim_op_ret_null); //| jmp >9 //|.code dasm_put(Dst, 4046); #line 6595 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_simple_assign(Dst, opline, var_addr, var_info, -1, (opline+1)->op1_type, op3_addr, val_info, res_addr, 0, 0, 0)) { return 0; } } else { uint32_t var_info = zend_array_element_type(op1_info, opline->op1_type, 0, 0); zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0); if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_W, op1_info, op2_info, dim_type, NULL, NULL, NULL)) { return 0; } if (op1_info & (MAY_BE_ARRAY_OF_REF|MAY_BE_OBJECT)) { var_info |= MAY_BE_REF; } if (var_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { var_info |= MAY_BE_RC1; } //|8: //| // value = zend_assign_to_variable(variable_ptr, value, OP_DATA_TYPE); dasm_put(Dst, 4117); #line 6616 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op1_type == IS_VAR) { ZEND_ASSERT(opline->result_type == IS_UNUSED); if (!zend_jit_assign_to_variable_call(Dst, opline, var_addr, var_addr, var_info, -1, (opline+1)->op1_type, op3_addr, val_info, res_addr, 0)) { return 0; } } else { if (!zend_jit_assign_to_variable(Dst, opline, var_addr, var_addr, var_info, -1, (opline+1)->op1_type, op3_addr, val_info, res_addr, 0)) { return 0; } } } } if (((op1_info & MAY_BE_ARRAY) && (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL))) || (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_ARRAY)))) { if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_ARRAY)) { //|.cold_code dasm_put(Dst, 289); #line 6634 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|7: dasm_put(Dst, 4315); #line 6635 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if ((op1_info & (MAY_BE_UNDEF|MAY_BE_NULL)) && (op1_info & MAY_BE_ARRAY)) { if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_ARRAY))) { //| CMP_ZVAL_TYPE op1_addr, IS_NULL ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 6641 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jg >2 dasm_put(Dst, 4318, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_NULL); #line 6642 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // ZVAL_ARR(container, zend_new_array(8)); if (Z_REG(op1_addr) != ZREG_FP) { //| mov T1, Ra(Z_REG(op1_addr)) // save dasm_put(Dst, 3426, (Z_REG(op1_addr))); #line 6646 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL _zend_new_array_0, r0 if (MAY_USE_32BIT_ADDR(_zend_new_array_0)) { dasm_put(Dst, 46, (ptrdiff_t)(_zend_new_array_0)); } else { if (IS_SIGNED_32BIT(_zend_new_array_0)) { dasm_put(Dst, 49, ((ptrdiff_t)_zend_new_array_0)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_zend_new_array_0)), (unsigned int)((((ptrdiff_t)_zend_new_array_0))>>32)); } dasm_put(Dst, 59); } #line 6648 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(op1_addr) != ZREG_FP) { //| mov Ra(Z_REG(op1_addr)), T1 // restore dasm_put(Dst, 3448, (Z_REG(op1_addr))); #line 6650 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_ZVAL_LVAL op1_addr, r0 if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2185, (Z_REG(op1_addr))); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } #line 6652 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO op1_addr, IS_ARRAY_EX ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 6653 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1a, r0 //| // ZEND_VM_C_GOTO(assign_dim_op_new_array); //| jmp <6 //|2: dasm_put(Dst, 4331, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_ARRAY_EX); #line 6657 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_ARRAY))) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 6661 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 6663 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->op2_type == IS_UNUSED) { //| xor FCARG2a, FCARG2a dasm_put(Dst, 2269); #line 6666 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opline->op2_type == IS_CONST && Z_EXTRA_P(RT_CONSTANT(opline, opline->op2)) == ZEND_EXTRA_VALUE) { ZEND_ASSERT(Z_MODE(op2_addr) == IS_CONST_ZVAL); //| LOAD_ADDR FCARG2a, (Z_ZV(op2_addr) + 1) if (IS_SIGNED_32BIT((Z_ZV(op2_addr) + 1))) { dasm_put(Dst, 712, ((ptrdiff_t)(Z_ZV(op2_addr) + 1))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)(Z_ZV(op2_addr) + 1))), (unsigned int)((((ptrdiff_t)(Z_ZV(op2_addr) + 1)))>>32)); } #line 6669 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LOAD_ZVAL_ADDR FCARG2a, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 6671 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if not(X64) //| sub r4, 8 //|.endif if (opline->result_type == IS_UNUSED) { //|.if X64 //| xor CARG4, CARG4 //|.else //| push 0 //|.endif dasm_put(Dst, 4349); #line 6681 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //|.if X64 //| LOAD_ZVAL_ADDR CARG4, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 4353, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 4358, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 4363, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 4371, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 6684 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| PUSH_ZVAL_ADDR res_addr, r0 //|.endif } //|.if X64 //| LOAD_ZVAL_ADDR CARG3, op3_addr if (Z_MODE(op3_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op3_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(op3_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(op3_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op3_addr)))>>32)); } } else if (Z_MODE(op3_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op3_addr)) { dasm_put(Dst, 3303, (Z_REG(op3_addr)), Z_OFFSET(op3_addr)); } else { dasm_put(Dst, 3311, (Z_REG(op3_addr))); } } else { ZEND_UNREACHABLE(); } #line 6690 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| PUSH_ZVAL_ADDR op3_addr, r0 //|.endif //| EXT_CALL zend_jit_assign_dim_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_dim_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_dim_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_dim_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_dim_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_dim_helper)), (unsigned int)((((ptrdiff_t)zend_jit_assign_dim_helper))>>32)); } dasm_put(Dst, 59); } #line 6694 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) //| add r4, 8 //|.endif #ifdef ZEND_JIT_USE_RC_INFERENCE if (((opline+1)->op1_type & (IS_TMP_VAR|IS_VAR)) && (val_info & MAY_BE_RC1)) { /* ASSIGN_DIM may increase refcount of the value */ val_info |= MAY_BE_RCN; } #endif //| FREE_OP (opline+1)->op1_type, (opline+1)->op1, val_info, 0, NULL if ((opline+1)->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((val_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))); if (((val_info) & MAY_BE_GUARD) || RC_MAY_BE_1(val_info)) { if (((val_info) & MAY_BE_GUARD) || RC_MAY_BE_N(val_info)) { if (0 && (((val_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(val_info) && ((val_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((val_info) & MAY_BE_GUARD) && has_concrete_type((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((val_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((val_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((val_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(val_info) && ((val_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((val_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(val_info) && ((val_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((val_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((val_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 6706 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_ARRAY)) { if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_ARRAY))) { //| jmp >9 // END dasm_put(Dst, 3591); #line 6711 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code dasm_put(Dst, 386); #line 6713 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } #ifdef ZEND_JIT_USE_RC_INFERENCE if ((opline->op2_type & (IS_TMP_VAR|IS_VAR)) && (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_ARRAY|MAY_BE_OBJECT))) { /* ASSIGN_DIM may increase refcount of the key */ op2_info |= MAY_BE_RCN; } #endif //|9: //| FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline dasm_put(Dst, 4072); if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 6725 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception(Dst); } return 1; } static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, uint32_t op1_def_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t op1_data_info, zend_ssa_range *op1_data_range, uint8_t dim_type, int may_throw) { zend_jit_addr op2_addr, op3_addr, var_addr; const void *not_found_exit_addr = NULL; uint32_t var_info = MAY_BE_NULL; ZEND_ASSERT(opline->result_type == IS_UNUSED); op2_addr = (opline->op2_type != IS_UNUSED) ? OP2_ADDR() : 0; op3_addr = OP1_DATA_ADDR(); //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 6745 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_REF) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 6747 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_NOT_Z_TYPE FCARG1a, IS_REFERENCE, >1 //| GET_Z_PTR FCARG2a, FCARG1a //| IF_NOT_TYPE byte [FCARG2a + offsetof(zend_reference, val) + offsetof(zval, u1.v.type)], IS_ARRAY, >2 //| lea FCARG1a, [FCARG2a + offsetof(zend_reference, val)] //| jmp >3 //|.cold_code dasm_put(Dst, 4172, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val) + offsetof(zval, u1.v.type), IS_ARRAY, offsetof(zend_reference, val)); #line 6753 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: //| EXT_CALL zend_jit_prepare_assign_dim_ref, r0 dasm_put(Dst, 1944); if (MAY_USE_32BIT_ADDR(zend_jit_prepare_assign_dim_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_prepare_assign_dim_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_prepare_assign_dim_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_prepare_assign_dim_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_prepare_assign_dim_ref)), (unsigned int)((((ptrdiff_t)zend_jit_prepare_assign_dim_ref))>>32)); } dasm_put(Dst, 59); } #line 6755 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test r0, r0 //| mov FCARG1a, r0 //| jne >1 //| jmp ->exception_handler_undef //|.code dasm_put(Dst, 4201); #line 6760 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 6761 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } if (op1_info & MAY_BE_ARRAY) { if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - MAY_BE_ARRAY)) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_ARRAY, >7 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4217, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_ARRAY); #line 6767 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|3: //| SEPARATE_ARRAY op1_addr, op1_info, 1 dasm_put(Dst, 346); if (RC_MAY_BE_N(op1_info)) { if (Z_REG(op1_addr) != ZREG_FP) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R0), (ZREG_R0)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R0 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R0)); } } else { ZEND_UNREACHABLE(); } if (RC_MAY_BE_1(op1_info)) { dasm_put(Dst, 4230); } if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } } if (MAY_USE_32BIT_ADDR(zend_jit_zval_array_dup)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_zval_array_dup)); } else { if (IS_SIGNED_32BIT(zend_jit_zval_array_dup)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_zval_array_dup)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_zval_array_dup)), (unsigned int)((((ptrdiff_t)zend_jit_zval_array_dup))>>32)); } dasm_put(Dst, 59); } dasm_put(Dst, 4238); } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } if (RC_MAY_BE_1(op1_info)) { dasm_put(Dst, 4244); if (1) { dasm_put(Dst, 4248); dasm_put(Dst, 63); } else { dasm_put(Dst, 3558); } } ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4254, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); if (MAY_USE_32BIT_ADDR(zend_array_dup)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_dup)); } else { if (IS_SIGNED_32BIT(zend_array_dup)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_dup)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_dup)), (unsigned int)((((ptrdiff_t)zend_array_dup))>>32)); } dasm_put(Dst, 59); } ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4273, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_ARRAY_EX); if (RC_MAY_BE_1(op1_info)) { if (1) { dasm_put(Dst, 2817); } } dasm_put(Dst, 1944); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } } #line 6770 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL)) { if (op1_info & MAY_BE_ARRAY) { //|.cold_code dasm_put(Dst, 289); #line 6774 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|7: dasm_put(Dst, 4315); #line 6775 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_ARRAY))) { //| CMP_ZVAL_TYPE op1_addr, IS_NULL ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 6778 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jg >7 dasm_put(Dst, 4285, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_NULL); #line 6779 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_REG(op1_addr) != ZREG_FP) { //| mov T1, Ra(Z_REG(op1_addr)) // save dasm_put(Dst, 3426, (Z_REG(op1_addr))); #line 6782 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & MAY_BE_UNDEF) { if (op1_info & MAY_BE_NULL) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_UNDEF, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); #line 6786 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov FCARG1a, opline->op1.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 759, opline->op1.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 6789 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 6790 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // ZVAL_ARR(container, zend_new_array(8)); //| EXT_CALL _zend_new_array_0, r0 if (MAY_USE_32BIT_ADDR(_zend_new_array_0)) { dasm_put(Dst, 46, (ptrdiff_t)(_zend_new_array_0)); } else { if (IS_SIGNED_32BIT(_zend_new_array_0)) { dasm_put(Dst, 49, ((ptrdiff_t)_zend_new_array_0)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_zend_new_array_0)), (unsigned int)((((ptrdiff_t)_zend_new_array_0))>>32)); } dasm_put(Dst, 59); } #line 6793 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(op1_addr) != ZREG_FP) { //| mov Ra(Z_REG(op1_addr)), T1 // restore dasm_put(Dst, 3448, (Z_REG(op1_addr))); #line 6795 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_ZVAL_LVAL op1_addr, r0 if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2185, (Z_REG(op1_addr))); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } #line 6797 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO op1_addr, IS_ARRAY_EX ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 6798 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1a, r0 dasm_put(Dst, 4273, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_ARRAY_EX); #line 6799 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_ARRAY) { //| jmp >1 //|.code dasm_put(Dst, 3691); #line 6802 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 6803 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_ARRAY)) { uint32_t var_def_info = zend_array_element_type(op1_def_info, opline->op1_type, 1, 0); //|6: dasm_put(Dst, 3290); #line 6810 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op2_type == IS_UNUSED) { var_info = MAY_BE_NULL; //| // var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval)); //| LOAD_ADDR_ZTS FCARG2a, executor_globals, uninitialized_zval if (IS_SIGNED_32BIT(&executor_globals.uninitialized_zval)) { dasm_put(Dst, 712, ((ptrdiff_t)&executor_globals.uninitialized_zval)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)&executor_globals.uninitialized_zval)), (unsigned int)((((ptrdiff_t)&executor_globals.uninitialized_zval))>>32)); } #line 6815 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_hash_next_index_insert, r0 if (MAY_USE_32BIT_ADDR(zend_hash_next_index_insert)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_next_index_insert)); } else { if (IS_SIGNED_32BIT(zend_hash_next_index_insert)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_next_index_insert)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_next_index_insert)), (unsigned int)((((ptrdiff_t)zend_hash_next_index_insert))>>32)); } dasm_put(Dst, 59); } #line 6816 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // if (UNEXPECTED(!var_ptr)) { //| test r0, r0 //| jz >1 //|.cold_code dasm_put(Dst, 4298); #line 6820 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| // zend_throw_error(NULL, "Cannot add element to the array as the next element is already occupied"); //| CANNOT_ADD_ELEMENT opline dasm_put(Dst, 63); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); dasm_put(Dst, 4307); } else { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } dasm_put(Dst, 4311); } #line 6823 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| //ZEND_VM_C_GOTO(assign_dim_op_ret_null); //| jmp >9 //|.code dasm_put(Dst, 4046); #line 6826 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { var_info = zend_array_element_type(op1_info, opline->op1_type, 0, 0); if (op1_info & (MAY_BE_ARRAY_OF_REF|MAY_BE_OBJECT)) { var_info |= MAY_BE_REF; } if (var_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { var_info |= MAY_BE_RC1; } if (dim_type != IS_UNKNOWN && dim_type != IS_UNDEF && (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_ARRAY && (op2_info & (MAY_BE_LONG|MAY_BE_STRING)) && !(op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_LONG|MAY_BE_STRING)))) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); not_found_exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!not_found_exit_addr) { return 0; } } if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_RW, op1_info, op2_info, dim_type, NULL, not_found_exit_addr, NULL)) { return 0; } //|8: dasm_put(Dst, 4117); #line 6852 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (not_found_exit_addr && dim_type != IS_REFERENCE) { //| IF_NOT_Z_TYPE, r0, dim_type, ¬_found_exit_addr dasm_put(Dst, 4377, offsetof(zval, u1.v.type), dim_type, (ptrdiff_t)(not_found_exit_addr)); #line 6854 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" var_info = (1 << dim_type) | (var_info & ~(MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)); } if (var_info & MAY_BE_REF) { binary_op_type binary_op = get_binary_op(opline->extended_value); //| IF_NOT_Z_TYPE, r0, IS_REFERENCE, >1 //| GET_Z_PTR FCARG1a, r0 //| cmp aword [FCARG1a + offsetof(zend_reference, sources.ptr)], 0 //| jnz >2 //| lea r0, aword [FCARG1a + offsetof(zend_reference, val)] //|.cold_code dasm_put(Dst, 4385, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, sources.ptr), offsetof(zend_reference, val)); #line 6864 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: //| LOAD_ZVAL_ADDR FCARG2a, op3_addr dasm_put(Dst, 1944); if (Z_MODE(op3_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op3_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op3_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op3_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op3_addr)))>>32)); } } else if (Z_MODE(op3_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op3_addr)) { dasm_put(Dst, 2255, (Z_REG(op3_addr)), Z_OFFSET(op3_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op3_addr))); } } else { ZEND_UNREACHABLE(); } #line 6866 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| LOAD_ADDR CARG3, binary_op if (IS_SIGNED_32BIT(binary_op)) { dasm_put(Dst, 3293, ((ptrdiff_t)binary_op)); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)binary_op)), (unsigned int)((((ptrdiff_t)binary_op))>>32)); } #line 6868 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ADDR binary_op, r0 //|.endif if (((opline+1)->op1_type & (IS_TMP_VAR|IS_VAR)) && (op1_data_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| EXT_CALL zend_jit_assign_op_to_typed_ref_tmp, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_op_to_typed_ref_tmp)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_op_to_typed_ref_tmp)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_op_to_typed_ref_tmp)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp)), (unsigned int)((((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp))>>32)); } dasm_put(Dst, 59); } #line 6875 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_assign_op_to_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_op_to_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_op_to_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_op_to_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_op_to_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_assign_op_to_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 6877 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if not(X64) //| add r4, 12 //|.endif //| jmp >9 //|.code dasm_put(Dst, 4046); #line 6883 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 6884 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0); switch (opline->extended_value) { case ZEND_ADD: case ZEND_SUB: case ZEND_MUL: case ZEND_DIV: if (!zend_jit_math_helper(Dst, opline, opline->extended_value, IS_CV, opline->op1, var_addr, var_info, (opline+1)->op1_type, (opline+1)->op1, op3_addr, op1_data_info, 0, var_addr, var_def_info, var_info, 1 /* may overflow */, may_throw)) { return 0; } break; case ZEND_BW_OR: case ZEND_BW_AND: case ZEND_BW_XOR: case ZEND_SL: case ZEND_SR: case ZEND_MOD: if (!zend_jit_long_math_helper(Dst, opline, opline->extended_value, IS_CV, opline->op1, var_addr, var_info, NULL, (opline+1)->op1_type, (opline+1)->op1, op3_addr, op1_data_info, op1_data_range, 0, var_addr, var_def_info, var_info, may_throw)) { return 0; } break; case ZEND_CONCAT: if (!zend_jit_concat_helper(Dst, opline, IS_CV, opline->op1, var_addr, var_info, (opline+1)->op1_type, (opline+1)->op1, op3_addr, op1_data_info, var_addr, may_throw)) { return 0; } break; default: ZEND_UNREACHABLE(); } //| FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 6922 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_ARRAY))) { binary_op_type binary_op; if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_ARRAY)) { //|.cold_code dasm_put(Dst, 289); #line 6929 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|7: dasm_put(Dst, 4315); #line 6930 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 6934 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->op2_type == IS_UNUSED) { //| xor FCARG2a, FCARG2a dasm_put(Dst, 2269); #line 6937 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opline->op2_type == IS_CONST && Z_EXTRA_P(RT_CONSTANT(opline, opline->op2)) == ZEND_EXTRA_VALUE) { ZEND_ASSERT(Z_MODE(op2_addr) == IS_CONST_ZVAL); //| LOAD_ADDR FCARG2a, (Z_ZV(op2_addr) + 1) if (IS_SIGNED_32BIT((Z_ZV(op2_addr) + 1))) { dasm_put(Dst, 712, ((ptrdiff_t)(Z_ZV(op2_addr) + 1))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)(Z_ZV(op2_addr) + 1))), (unsigned int)((((ptrdiff_t)(Z_ZV(op2_addr) + 1)))>>32)); } #line 6940 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LOAD_ZVAL_ADDR FCARG2a, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 6942 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } binary_op = get_binary_op(opline->extended_value); //|.if X64 //| LOAD_ZVAL_ADDR CARG3, op3_addr if (Z_MODE(op3_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op3_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(op3_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(op3_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op3_addr)))>>32)); } } else if (Z_MODE(op3_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op3_addr)) { dasm_put(Dst, 3303, (Z_REG(op3_addr)), Z_OFFSET(op3_addr)); } else { dasm_put(Dst, 3311, (Z_REG(op3_addr))); } } else { ZEND_UNREACHABLE(); } #line 6946 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| LOAD_ADDR CARG4, binary_op if (IS_SIGNED_32BIT(binary_op)) { dasm_put(Dst, 4353, ((ptrdiff_t)binary_op)); } else { dasm_put(Dst, 4358, (unsigned int)(((ptrdiff_t)binary_op)), (unsigned int)((((ptrdiff_t)binary_op))>>32)); } #line 6947 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 8 //| PUSH_ADDR binary_op, r0 //| PUSH_ZVAL_ADDR op3_addr, r0 //|.endif //| EXT_CALL zend_jit_assign_dim_op_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_dim_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_dim_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_dim_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_dim_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_dim_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_assign_dim_op_helper))>>32)); } dasm_put(Dst, 59); } #line 6953 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) //| add r4, 8 //|.endif //|9: //| FREE_OP (opline+1)->op1_type, (opline+1)->op1, op1_data_info, 0, NULL dasm_put(Dst, 4072); if ((opline+1)->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_data_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_data_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))); if (((op1_data_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_data_info)) { if (((op1_data_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_data_info)) { if (0 && (((op1_data_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_data_info) && ((op1_data_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_data_info) & MAY_BE_GUARD) && has_concrete_type((op1_data_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_data_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_data_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((op1_data_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_data_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_data_info) && ((op1_data_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_data_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_data_info) && ((op1_data_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_data_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op1_data_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 6959 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| FREE_OP opline->op2_type, opline->op2, op2_info, 0, NULL if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 6960 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception(Dst); } if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_ARRAY)) { //| jmp >9 // END //|.code dasm_put(Dst, 4046); #line 6967 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|9: dasm_put(Dst, 4072); #line 6968 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if ((op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_ARRAY)) && (!not_found_exit_addr || (var_info & MAY_BE_REF))) { //|.cold_code dasm_put(Dst, 289); #line 6972 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|9: //| FREE_OP (opline+1)->op1_type, (opline+1)->op1, op1_data_info, 0, opline dasm_put(Dst, 4072); if ((opline+1)->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_data_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_data_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))); if (((op1_data_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_data_info)) { if (((op1_data_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_data_info)) { if (0 && (((op1_data_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_data_info) && ((op1_data_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_data_info) & MAY_BE_GUARD) && has_concrete_type((op1_data_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_data_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_data_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_data_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_data_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_data_info) && ((op1_data_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_data_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_data_info) && ((op1_data_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_data_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op1_data_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 6974 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 6975 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception(Dst); } //| jmp >9 //|.code dasm_put(Dst, 4046); #line 6980 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|9: dasm_put(Dst, 4072); #line 6981 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_assign_op(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, uint32_t op1_def_info, zend_ssa_range *op1_range, uint32_t op2_info, zend_ssa_range *op2_range, int may_overflow, int may_throw) { zend_jit_addr op1_addr, op2_addr; ZEND_ASSERT(opline->op1_type == IS_CV && opline->result_type == IS_UNUSED); ZEND_ASSERT(!(op1_info & MAY_BE_UNDEF) && !(op2_info & MAY_BE_UNDEF)); op1_addr = OP1_ADDR(); op2_addr = OP2_ADDR(); if (op1_info & MAY_BE_REF) { binary_op_type binary_op = get_binary_op(opline->extended_value); //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 6999 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_NOT_Z_TYPE, FCARG1a, IS_REFERENCE, >1 //| GET_Z_PTR FCARG1a, FCARG1a //| cmp aword [FCARG1a + offsetof(zend_reference, sources.ptr)], 0 //| jnz >2 //| add FCARG1a, offsetof(zend_reference, val) //|.cold_code dasm_put(Dst, 4411, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, sources.ptr), offsetof(zend_reference, val)); #line 7005 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: //| LOAD_ZVAL_ADDR FCARG2a, op2_addr dasm_put(Dst, 1944); if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 7007 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| LOAD_ADDR CARG3, binary_op if (IS_SIGNED_32BIT(binary_op)) { dasm_put(Dst, 3293, ((ptrdiff_t)binary_op)); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)binary_op)), (unsigned int)((((ptrdiff_t)binary_op))>>32)); } #line 7009 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ADDR binary_op, r0 //|.endif //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 7014 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((opline->op2_type & (IS_TMP_VAR|IS_VAR)) && (op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| EXT_CALL zend_jit_assign_op_to_typed_ref_tmp, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_op_to_typed_ref_tmp)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_op_to_typed_ref_tmp)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_op_to_typed_ref_tmp)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp)), (unsigned int)((((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp))>>32)); } dasm_put(Dst, 59); } #line 7017 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_assign_op_to_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_op_to_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_op_to_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_op_to_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_op_to_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_assign_op_to_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 7019 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if not(X64) //| add r4, 12 //|.endif zend_jit_check_exception(Dst); //| jmp >9 //|.code dasm_put(Dst, 4046); #line 7026 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 7027 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } int result; switch (opline->extended_value) { case ZEND_ADD: case ZEND_SUB: case ZEND_MUL: case ZEND_DIV: result = zend_jit_math_helper(Dst, opline, opline->extended_value, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, opline->op1.var, op1_addr, op1_def_info, op1_info, may_overflow, may_throw); break; case ZEND_BW_OR: case ZEND_BW_AND: case ZEND_BW_XOR: case ZEND_SL: case ZEND_SR: case ZEND_MOD: result = zend_jit_long_math_helper(Dst, opline, opline->extended_value, opline->op1_type, opline->op1, op1_addr, op1_info, op1_range, opline->op2_type, opline->op2, op2_addr, op2_info, op2_range, opline->op1.var, op1_addr, op1_def_info, op1_info, may_throw); break; case ZEND_CONCAT: result = zend_jit_concat_helper(Dst, opline, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, op1_addr, may_throw); break; default: ZEND_UNREACHABLE(); } //|9: dasm_put(Dst, 4072); #line 7056 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return result; } static int zend_jit_cmp_long_long(dasm_State **Dst, const zend_op *opline, zend_ssa_range *op1_range, zend_jit_addr op1_addr, zend_ssa_range *op2_range, zend_jit_addr op2_addr, zend_jit_addr res_addr, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr, bool skip_comparison) { bool swap = 0; bool result; if (zend_jit_is_constant_cmp_long_long(opline, op1_range, op1_addr, op2_range, op2_addr, &result)) { if (!smart_branch_opcode || smart_branch_opcode == ZEND_JMPZ_EX || smart_branch_opcode == ZEND_JMPNZ_EX) { //| SET_ZVAL_TYPE_INFO res_addr, (result ? IS_TRUE : IS_FALSE) ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), (result ? IS_TRUE : IS_FALSE)); #line 7080 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (smart_branch_opcode && !exit_addr) { if (smart_branch_opcode == ZEND_JMPZ || smart_branch_opcode == ZEND_JMPZ_EX) { if (!result) { //| jmp => target_label dasm_put(Dst, 1542, target_label); #line 7086 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (smart_branch_opcode == ZEND_JMPNZ || smart_branch_opcode == ZEND_JMPNZ_EX) { if (result) { //| jmp => target_label dasm_put(Dst, 1542, target_label); #line 7091 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { ZEND_UNREACHABLE(); } } return 1; } if (skip_comparison) { if (Z_MODE(op1_addr) != IS_REG && (Z_MODE(op2_addr) == IS_REG || (Z_MODE(op1_addr) == IS_CONST_ZVAL && Z_MODE(op2_addr) != IS_CONST_ZVAL))) { swap = 1; } } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(op2_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op2_addr)) == 0) { //| test Ra(Z_REG(op1_addr)), Ra(Z_REG(op1_addr)) dasm_put(Dst, 3464, (Z_REG(op1_addr)), (Z_REG(op1_addr))); #line 7108 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LONG_OP cmp, Z_REG(op1_addr), op2_addr, r0 if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 4437, (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (Z_REG(op1_addr))); } else { dasm_put(Dst, 4447, (Z_REG(op1_addr)), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 4455, (Z_REG(op1_addr)), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 4465, (Z_REG(op2_addr)), (Z_REG(op1_addr))); } else { ZEND_UNREACHABLE(); } #line 7110 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (Z_MODE(op2_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op1_addr)) == 0) { //| test Ra(Z_REG(op2_addr)), Ra(Z_REG(op2_addr)) dasm_put(Dst, 3464, (Z_REG(op2_addr)), (Z_REG(op2_addr))); #line 7114 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LONG_OP cmp, Z_REG(op2_addr), op1_addr, r0 if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 4437, (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32), (Z_REG(op2_addr))); } else { dasm_put(Dst, 4447, (Z_REG(op2_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 4455, (Z_REG(op2_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 4465, (Z_REG(op1_addr)), (Z_REG(op2_addr))); } else { ZEND_UNREACHABLE(); } #line 7116 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } swap = 1; } else if (Z_MODE(op1_addr) == IS_CONST_ZVAL && Z_MODE(op2_addr) != IS_CONST_ZVAL) { //| LONG_OP_WITH_CONST cmp, op2_addr, Z_LVAL_P(Z_ZV(op1_addr)) if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 4473, (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 4485, (Z_REG(op2_addr)), Z_OFFSET(op2_addr), Z_LVAL_P(Z_ZV(op1_addr))); } } else if (Z_MODE(op2_addr) == IS_REG) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 4437, (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32), (Z_REG(op2_addr))); } else { dasm_put(Dst, 4447, (Z_REG(op2_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 7120 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" swap = 1; } else if (Z_MODE(op2_addr) == IS_CONST_ZVAL && Z_MODE(op1_addr) != IS_CONST_ZVAL) { //| LONG_OP_WITH_CONST cmp, op1_addr, Z_LVAL_P(Z_ZV(op2_addr)) if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 4473, (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 4485, (Z_REG(op1_addr)), Z_OFFSET(op1_addr), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op1_addr) == IS_REG) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 4437, (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (Z_REG(op1_addr))); } else { dasm_put(Dst, 4447, (Z_REG(op1_addr)), Z_LVAL_P(Z_ZV(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 7123 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| GET_ZVAL_LVAL ZREG_R0, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R0), (ZREG_R0)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R0 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R0)); } } else { ZEND_UNREACHABLE(); } #line 7125 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(op2_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op2_addr)) == 0) { //| test r0, r0 dasm_put(Dst, 3529); #line 7127 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LONG_OP cmp, ZREG_R0, op2_addr, r0 if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 4437, (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32), (ZREG_R0)); } else { dasm_put(Dst, 4447, (ZREG_R0), Z_LVAL_P(Z_ZV(op2_addr))); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 4455, (ZREG_R0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { dasm_put(Dst, 4465, (Z_REG(op2_addr)), (ZREG_R0)); } else { ZEND_UNREACHABLE(); } #line 7129 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (smart_branch_opcode) { if (smart_branch_opcode == ZEND_JMPZ_EX || smart_branch_opcode == ZEND_JMPNZ_EX) { switch (opline->opcode) { case ZEND_IS_EQUAL: case ZEND_IS_IDENTICAL: case ZEND_CASE: case ZEND_CASE_STRICT: //| sete al dasm_put(Dst, 4494); #line 7142 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_NOT_EQUAL: case ZEND_IS_NOT_IDENTICAL: //| setne al dasm_put(Dst, 4498); #line 7146 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_SMALLER: if (swap) { //| setg al dasm_put(Dst, 4502); #line 7150 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| setl al dasm_put(Dst, 4506); #line 7152 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_SMALLER_OR_EQUAL: if (swap) { //| setge al dasm_put(Dst, 4510); #line 7157 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| setle al dasm_put(Dst, 4514); #line 7159 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; default: ZEND_UNREACHABLE(); } //| movzx eax, al //| lea eax, [eax + 2] //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 4518, 2); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 7167 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (smart_branch_opcode == ZEND_JMPZ || smart_branch_opcode == ZEND_JMPZ_EX) { switch (opline->opcode) { case ZEND_IS_EQUAL: case ZEND_IS_IDENTICAL: case ZEND_CASE: case ZEND_CASE_STRICT: if (exit_addr) { //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 7177 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jne => target_label dasm_put(Dst, 1787, target_label); #line 7179 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_NOT_EQUAL: if (exit_addr) { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 7184 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| je => target_label dasm_put(Dst, 4533, target_label); #line 7186 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_NOT_IDENTICAL: if (exit_addr) { //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 7191 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| je => target_label dasm_put(Dst, 4533, target_label); #line 7193 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_SMALLER: if (swap) { if (exit_addr) { //| jle &exit_addr dasm_put(Dst, 3734, (ptrdiff_t)(exit_addr)); #line 7199 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jle => target_label dasm_put(Dst, 4537, target_label); #line 7201 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (exit_addr) { //| jge &exit_addr dasm_put(Dst, 4541, (ptrdiff_t)(exit_addr)); #line 7205 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jge => target_label dasm_put(Dst, 4545, target_label); #line 7207 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } break; case ZEND_IS_SMALLER_OR_EQUAL: if (swap) { if (exit_addr) { //| jl &exit_addr dasm_put(Dst, 4549, (ptrdiff_t)(exit_addr)); #line 7214 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jl => target_label dasm_put(Dst, 4553, target_label); #line 7216 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (exit_addr) { //| jg &exit_addr dasm_put(Dst, 3738, (ptrdiff_t)(exit_addr)); #line 7220 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jg => target_label dasm_put(Dst, 4557, target_label); #line 7222 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } break; default: ZEND_UNREACHABLE(); } } else if (smart_branch_opcode == ZEND_JMPNZ || smart_branch_opcode == ZEND_JMPNZ_EX) { switch (opline->opcode) { case ZEND_IS_EQUAL: case ZEND_IS_IDENTICAL: case ZEND_CASE: case ZEND_CASE_STRICT: if (exit_addr) { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 7237 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| je => target_label dasm_put(Dst, 4533, target_label); #line 7239 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_NOT_EQUAL: if (exit_addr) { //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 7244 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jne => target_label dasm_put(Dst, 1787, target_label); #line 7246 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_NOT_IDENTICAL: if (exit_addr) { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 7251 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jne => target_label dasm_put(Dst, 1787, target_label); #line 7253 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_SMALLER: if (swap) { if (exit_addr) { //| jg &exit_addr dasm_put(Dst, 3738, (ptrdiff_t)(exit_addr)); #line 7259 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jg => target_label dasm_put(Dst, 4557, target_label); #line 7261 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (exit_addr) { //| jl &exit_addr dasm_put(Dst, 4549, (ptrdiff_t)(exit_addr)); #line 7265 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jl => target_label dasm_put(Dst, 4553, target_label); #line 7267 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } break; case ZEND_IS_SMALLER_OR_EQUAL: if (swap) { if (exit_addr) { //| jge &exit_addr dasm_put(Dst, 4541, (ptrdiff_t)(exit_addr)); #line 7274 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jge => target_label dasm_put(Dst, 4545, target_label); #line 7276 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (exit_addr) { //| jle &exit_addr dasm_put(Dst, 3734, (ptrdiff_t)(exit_addr)); #line 7280 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jle => target_label dasm_put(Dst, 4537, target_label); #line 7282 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } break; default: ZEND_UNREACHABLE(); } } else { ZEND_UNREACHABLE(); } } else { switch (opline->opcode) { case ZEND_IS_EQUAL: case ZEND_IS_IDENTICAL: case ZEND_CASE: case ZEND_CASE_STRICT: //| sete al dasm_put(Dst, 4494); #line 7298 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_NOT_EQUAL: case ZEND_IS_NOT_IDENTICAL: //| setne al dasm_put(Dst, 4498); #line 7302 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_SMALLER: if (swap) { //| setg al dasm_put(Dst, 4502); #line 7306 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| setl al dasm_put(Dst, 4506); #line 7308 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_SMALLER_OR_EQUAL: if (swap) { //| setge al dasm_put(Dst, 4510); #line 7313 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| setle al dasm_put(Dst, 4514); #line 7315 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; default: ZEND_UNREACHABLE(); } //| movzx eax, al //| add eax, 2 //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 4561); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 7323 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_cmp_double_common(dasm_State **Dst, const zend_op *opline, zend_jit_addr res_addr, bool swap, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { if (smart_branch_opcode) { if (smart_branch_opcode == ZEND_JMPZ) { switch (opline->opcode) { case ZEND_IS_EQUAL: case ZEND_IS_IDENTICAL: case ZEND_CASE: case ZEND_CASE_STRICT: if (exit_addr) { //| jne &exit_addr //| jp &exit_addr dasm_put(Dst, 4568, (ptrdiff_t)(exit_addr), (ptrdiff_t)(exit_addr)); #line 7340 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jne => target_label //| jp => target_label dasm_put(Dst, 4575, target_label, target_label); #line 7343 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_NOT_EQUAL: //| jp >1 dasm_put(Dst, 4582); #line 7347 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 7349 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| je => target_label dasm_put(Dst, 4533, target_label); #line 7351 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|1: dasm_put(Dst, 63); #line 7353 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_NOT_IDENTICAL: if (exit_addr) { //| jne &exit_addr //| jp &exit_addr dasm_put(Dst, 4568, (ptrdiff_t)(exit_addr), (ptrdiff_t)(exit_addr)); #line 7358 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jp >1 //| je => target_label //|1: dasm_put(Dst, 4587, target_label); #line 7362 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_SMALLER: if (swap) { if (exit_addr) { //| jbe &exit_addr dasm_put(Dst, 3544, (ptrdiff_t)(exit_addr)); #line 7368 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jbe => target_label dasm_put(Dst, 4597, target_label); #line 7370 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (exit_addr) { //| jae &exit_addr //| jp &exit_addr dasm_put(Dst, 4601, (ptrdiff_t)(exit_addr), (ptrdiff_t)(exit_addr)); #line 7375 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jae => target_label //| jp => target_label dasm_put(Dst, 4608, target_label, target_label); #line 7378 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } break; case ZEND_IS_SMALLER_OR_EQUAL: if (swap) { if (exit_addr) { //| jb &exit_addr dasm_put(Dst, 4615, (ptrdiff_t)(exit_addr)); #line 7385 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jb => target_label dasm_put(Dst, 4619, target_label); #line 7387 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (exit_addr) { //| ja &exit_addr //| jp &exit_addr dasm_put(Dst, 4623, (ptrdiff_t)(exit_addr), (ptrdiff_t)(exit_addr)); #line 7392 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| ja => target_label //| jp => target_label dasm_put(Dst, 4630, target_label, target_label); #line 7395 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } break; default: ZEND_UNREACHABLE(); } } else if (smart_branch_opcode == ZEND_JMPNZ) { switch (opline->opcode) { case ZEND_IS_EQUAL: case ZEND_IS_IDENTICAL: case ZEND_CASE: case ZEND_CASE_STRICT: //| jp >1 dasm_put(Dst, 4582); #line 7408 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 7410 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| je => target_label dasm_put(Dst, 4533, target_label); #line 7412 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|1: dasm_put(Dst, 63); #line 7414 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_NOT_EQUAL: if (exit_addr) { //| jne &exit_addr //| jp &exit_addr dasm_put(Dst, 4568, (ptrdiff_t)(exit_addr), (ptrdiff_t)(exit_addr)); #line 7419 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jne => target_label //| jp => target_label dasm_put(Dst, 4575, target_label, target_label); #line 7422 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_NOT_IDENTICAL: if (exit_addr) { //| jp >1 //| je &exit_addr //|1: dasm_put(Dst, 4637, (ptrdiff_t)(exit_addr)); #line 7429 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jne => target_label //| jp => target_label dasm_put(Dst, 4575, target_label, target_label); #line 7432 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_SMALLER: if (swap) { if (exit_addr) { //| ja &exit_addr dasm_put(Dst, 4647, (ptrdiff_t)(exit_addr)); #line 7438 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| ja => target_label dasm_put(Dst, 4651, target_label); #line 7440 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| jp >1 dasm_put(Dst, 4582); #line 7443 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { //| jb &exit_addr dasm_put(Dst, 4615, (ptrdiff_t)(exit_addr)); #line 7445 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jb => target_label dasm_put(Dst, 4619, target_label); #line 7447 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|1: dasm_put(Dst, 63); #line 7449 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_SMALLER_OR_EQUAL: if (swap) { if (exit_addr) { //| jae &exit_addr dasm_put(Dst, 1646, (ptrdiff_t)(exit_addr)); #line 7455 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jae => target_label dasm_put(Dst, 4655, target_label); #line 7457 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| jp >1 dasm_put(Dst, 4582); #line 7460 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { //| jbe &exit_addr dasm_put(Dst, 3544, (ptrdiff_t)(exit_addr)); #line 7462 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jbe => target_label dasm_put(Dst, 4597, target_label); #line 7464 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|1: dasm_put(Dst, 63); #line 7466 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; default: ZEND_UNREACHABLE(); } } else if (smart_branch_opcode == ZEND_JMPZ_EX) { switch (opline->opcode) { case ZEND_IS_EQUAL: case ZEND_IS_IDENTICAL: case ZEND_CASE: case ZEND_CASE_STRICT: //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 7478 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne => target_label //| jp => target_label //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE dasm_put(Dst, 4659, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE, target_label, target_label); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 7481 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_NOT_EQUAL: case ZEND_IS_NOT_IDENTICAL: //| jp >1 //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE dasm_put(Dst, 4582); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 7486 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| je => target_label //|1: //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE dasm_put(Dst, 4674, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE, target_label); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 7489 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_SMALLER: if (swap) { //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 7493 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jbe => target_label //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE dasm_put(Dst, 4688, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE, target_label); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 7495 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 7497 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jae => target_label //| jp => target_label //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE dasm_put(Dst, 4700, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE, target_label, target_label); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 7500 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_SMALLER_OR_EQUAL: if (swap) { //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 7505 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jb => target_label //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE dasm_put(Dst, 4715, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE, target_label); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 7507 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 7509 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ja => target_label //| jp => target_label //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE dasm_put(Dst, 4727, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE, target_label, target_label); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 7512 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; default: ZEND_UNREACHABLE(); } } else if (smart_branch_opcode == ZEND_JMPNZ_EX) { switch (opline->opcode) { case ZEND_IS_EQUAL: case ZEND_IS_IDENTICAL: case ZEND_CASE: case ZEND_CASE_STRICT: //| jp >1 //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE dasm_put(Dst, 4582); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 7525 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| je => target_label //|1: //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE dasm_put(Dst, 4674, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE, target_label); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 7528 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_NOT_EQUAL: case ZEND_IS_NOT_IDENTICAL: //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 7532 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne => target_label //| jp => target_label //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE dasm_put(Dst, 4659, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE, target_label, target_label); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 7535 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_SMALLER: if (swap) { //| seta al //| movzx eax, al //| lea eax, [eax + 2] //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 4742, 2); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 7542 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ja => target_label dasm_put(Dst, 4752, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), target_label); #line 7543 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jp >1 //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE dasm_put(Dst, 4582); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 7546 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jb => target_label //|1: //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE dasm_put(Dst, 4763, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE, target_label); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 7549 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_SMALLER_OR_EQUAL: if (swap) { //| setae al //| movzx eax, al //| lea eax, [eax + 2] //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 4777, 2); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 7557 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jae => target_label dasm_put(Dst, 4787, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), target_label); #line 7558 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jp >1 //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE dasm_put(Dst, 4582); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 7561 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jbe => target_label //|1: //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE dasm_put(Dst, 4798, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE, target_label); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 7564 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; default: ZEND_UNREACHABLE(); } } else { ZEND_UNREACHABLE(); } } else { switch (opline->opcode) { case ZEND_IS_EQUAL: case ZEND_IS_IDENTICAL: case ZEND_CASE: case ZEND_CASE_STRICT: //| jp >1 //| mov eax, IS_TRUE //| je >2 //|1: //| mov eax, IS_FALSE //|2: dasm_put(Dst, 4812, IS_TRUE, IS_FALSE); #line 7584 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_NOT_EQUAL: case ZEND_IS_NOT_IDENTICAL: //| jp >1 //| mov eax, IS_FALSE //| je >2 //|1: //| mov eax, IS_TRUE //|2: dasm_put(Dst, 4812, IS_FALSE, IS_TRUE); #line 7593 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_SMALLER: if (swap) { //| seta al //| movzx eax, al //| add eax, 2 dasm_put(Dst, 4829); #line 7599 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jp >1 //| mov eax, IS_TRUE //| jb >2 //|1: //| mov eax, IS_FALSE //|2: dasm_put(Dst, 4839, IS_TRUE, IS_FALSE); #line 7606 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_SMALLER_OR_EQUAL: if (swap) { //| setae al //| movzx eax, al //| add eax, 2 dasm_put(Dst, 4856); #line 7613 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jp >1 //| mov eax, IS_TRUE //| jbe >2 //|1: //| mov eax, IS_FALSE //|2: dasm_put(Dst, 4866, IS_TRUE, IS_FALSE); #line 7620 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; default: ZEND_UNREACHABLE(); } //| SET_ZVAL_TYPE_INFO res_addr, eax ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 7626 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_cmp_long_double(dasm_State **Dst, const zend_op *opline, zend_jit_addr op1_addr, zend_jit_addr op2_addr, zend_jit_addr res_addr, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { zend_reg tmp_reg = ZREG_XMM0; //| DOUBLE_GET_ZVAL_LVAL tmp_reg, op1_addr, ZREG_R0 if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(Z_ZV(op1_addr))); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (ZREG_R0)); } else { dasm_put(Dst, 2659, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (ZREG_R0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 2678, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2704, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr))); } else { dasm_put(Dst, 2659, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 7636 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| DOUBLE_CMP tmp_reg, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 4883, (tmp_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 4893, (tmp_reg-ZREG_XMM0), Z_ZV(op2_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 4903, (tmp_reg-ZREG_XMM0)); } else { dasm_put(Dst, 4911, (tmp_reg-ZREG_XMM0)); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 4919, (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 4931, (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } } else if (Z_MODE(op2_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 4943, (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 4953, (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } #line 7637 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return zend_jit_cmp_double_common(Dst, opline, res_addr, 0, smart_branch_opcode, target_label, target_label2, exit_addr); } static int zend_jit_cmp_double_long(dasm_State **Dst, const zend_op *opline, zend_jit_addr op1_addr, zend_jit_addr op2_addr, zend_jit_addr res_addr, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { zend_reg tmp_reg = ZREG_XMM0; //| DOUBLE_GET_ZVAL_LVAL tmp_reg, op2_addr, ZREG_R0 if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(Z_ZV(op2_addr))); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (ZREG_R0)); } else { dasm_put(Dst, 2659, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (ZREG_R0)); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 2678, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2704, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } } else if (Z_MODE(op2_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr))); } else { dasm_put(Dst, 2659, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 7646 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| DOUBLE_CMP tmp_reg, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 4883, (tmp_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 4893, (tmp_reg-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 4903, (tmp_reg-ZREG_XMM0)); } else { dasm_put(Dst, 4911, (tmp_reg-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 4919, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 4931, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 4943, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 4953, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } #line 7647 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return zend_jit_cmp_double_common(Dst, opline, res_addr, /* swap */ 1, smart_branch_opcode, target_label, target_label2, exit_addr); } static int zend_jit_cmp_double_double(dasm_State **Dst, const zend_op *opline, zend_jit_addr op1_addr, zend_jit_addr op2_addr, zend_jit_addr res_addr, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { bool swap = 0; if (Z_MODE(op1_addr) == IS_REG) { //| DOUBLE_CMP Z_REG(op1_addr), op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 4883, (Z_REG(op1_addr)-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 4893, (Z_REG(op1_addr)-ZREG_XMM0), Z_ZV(op2_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 4903, (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 4911, (Z_REG(op1_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 4919, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 4931, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } } else if (Z_MODE(op2_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 4943, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 4953, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } #line 7657 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_MODE(op2_addr) == IS_REG) { //| DOUBLE_CMP Z_REG(op2_addr), op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 4883, (Z_REG(op2_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 4893, (Z_REG(op2_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 4903, (Z_REG(op2_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 4911, (Z_REG(op2_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 4919, (Z_REG(op2_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 4931, (Z_REG(op2_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 4943, (Z_REG(op2_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 4953, (Z_REG(op2_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } #line 7659 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" swap = 1; } else { zend_reg tmp_reg = ZREG_XMM0; //| DOUBLE_GET_ZVAL_DVAL tmp_reg, op1_addr if (Z_MODE(op1_addr) != IS_REG || tmp_reg != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (tmp_reg-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (tmp_reg-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (tmp_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (tmp_reg-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } #line 7664 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| DOUBLE_CMP tmp_reg, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 4883, (tmp_reg-ZREG_XMM0), Z_ZV(op2_addr)); } else { dasm_put(Dst, 4893, (tmp_reg-ZREG_XMM0), Z_ZV(op2_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 4903, (tmp_reg-ZREG_XMM0)); } else { dasm_put(Dst, 4911, (tmp_reg-ZREG_XMM0)); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 4919, (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 4931, (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } } else if (Z_MODE(op2_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 4943, (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 4953, (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } #line 7665 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return zend_jit_cmp_double_common(Dst, opline, res_addr, swap, smart_branch_opcode, target_label, target_label2, exit_addr); } static int zend_jit_cmp_slow(dasm_State **Dst, const zend_op *opline, zend_jit_addr res_addr, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { //| test, eax, eax dasm_put(Dst, 3530); #line 7673 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (smart_branch_opcode) { if (smart_branch_opcode == ZEND_JMPZ_EX || smart_branch_opcode == ZEND_JMPNZ_EX) { switch (opline->opcode) { case ZEND_IS_EQUAL: case ZEND_CASE: //| sete al dasm_put(Dst, 4494); #line 7680 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_NOT_EQUAL: //| setne al dasm_put(Dst, 4498); #line 7683 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_SMALLER: //| setl al dasm_put(Dst, 4506); #line 7686 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_SMALLER_OR_EQUAL: //| setle al dasm_put(Dst, 4514); #line 7689 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; default: ZEND_UNREACHABLE(); } //| movzx eax, al //| lea eax, [eax + 2] //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 4518, 2); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 7696 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (smart_branch_opcode == ZEND_JMPZ || smart_branch_opcode == ZEND_JMPZ_EX) { switch (opline->opcode) { case ZEND_IS_EQUAL: case ZEND_CASE: if (exit_addr) { //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 7704 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jne => target_label dasm_put(Dst, 1787, target_label); #line 7706 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_NOT_EQUAL: if (exit_addr) { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 7711 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| je => target_label dasm_put(Dst, 4533, target_label); #line 7713 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_SMALLER: if (exit_addr) { //| jge &exit_addr dasm_put(Dst, 4541, (ptrdiff_t)(exit_addr)); #line 7718 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jge => target_label dasm_put(Dst, 4545, target_label); #line 7720 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_SMALLER_OR_EQUAL: if (exit_addr) { //| jg &exit_addr dasm_put(Dst, 3738, (ptrdiff_t)(exit_addr)); #line 7725 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jg => target_label dasm_put(Dst, 4557, target_label); #line 7727 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; default: ZEND_UNREACHABLE(); } } else if (smart_branch_opcode == ZEND_JMPNZ || smart_branch_opcode == ZEND_JMPNZ_EX) { switch (opline->opcode) { case ZEND_IS_EQUAL: case ZEND_CASE: if (exit_addr) { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 7739 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| je => target_label dasm_put(Dst, 4533, target_label); #line 7741 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_NOT_EQUAL: if (exit_addr) { //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 7746 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jne => target_label dasm_put(Dst, 1787, target_label); #line 7748 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_SMALLER: if (exit_addr) { //| jl &exit_addr dasm_put(Dst, 4549, (ptrdiff_t)(exit_addr)); #line 7753 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jl => target_label dasm_put(Dst, 4553, target_label); #line 7755 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; case ZEND_IS_SMALLER_OR_EQUAL: if (exit_addr) { //| jle &exit_addr dasm_put(Dst, 3734, (ptrdiff_t)(exit_addr)); #line 7760 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jle => target_label dasm_put(Dst, 4537, target_label); #line 7762 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } break; default: ZEND_UNREACHABLE(); } } else { ZEND_UNREACHABLE(); } } else { switch (opline->opcode) { case ZEND_IS_EQUAL: case ZEND_CASE: //| sete al dasm_put(Dst, 4494); #line 7775 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_NOT_EQUAL: //| setne al dasm_put(Dst, 4498); #line 7778 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_SMALLER: //| setl al dasm_put(Dst, 4506); #line 7781 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_IS_SMALLER_OR_EQUAL: //| setle al dasm_put(Dst, 4514); #line 7784 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; default: ZEND_UNREACHABLE(); } //| movzx eax, al //| add eax, 2 //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 4561); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 7791 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_cmp(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_ssa_range *op1_range, zend_jit_addr op1_addr, uint32_t op2_info, zend_ssa_range *op2_range, zend_jit_addr op2_addr, zend_jit_addr res_addr, int may_throw, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr, bool skip_comparison) { bool same_ops = (opline->op1_type == opline->op2_type) && (opline->op1.var == opline->op2.var); bool has_slow; has_slow = (op1_info & (MAY_BE_LONG|MAY_BE_DOUBLE)) && (op2_info & (MAY_BE_LONG|MAY_BE_DOUBLE)) && ((op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE))) || (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE)))); if ((op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_LONG)) { if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_LONG)) { if (op1_info & MAY_BE_DOUBLE) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >4 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4963, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 7825 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >9 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4976, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 7827 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!same_ops && (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_LONG))) { if (op2_info & MAY_BE_DOUBLE) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_LONG, >3 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); #line 7832 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 4989, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 7833 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|3: dasm_put(Dst, 346); #line 7834 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE))) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_DOUBLE, >9 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4976, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 7836 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!zend_jit_cmp_long_double(Dst, opline, op1_addr, op2_addr, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr)) { return 0; } //| jmp >6 //|.code dasm_put(Dst, 5003); #line 7842 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op2_addr, IS_LONG, >9 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4976, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 7844 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!zend_jit_cmp_long_long(Dst, opline, op1_range, op1_addr, op2_range, op2_addr, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr, skip_comparison)) { return 0; } if (op1_info & MAY_BE_DOUBLE) { //|.cold_code dasm_put(Dst, 289); #line 7851 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|4: dasm_put(Dst, 388); #line 7852 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE))) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_DOUBLE, >9 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4976, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 7854 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op2_info & MAY_BE_DOUBLE) { if (!same_ops && (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_DOUBLE))) { if (!same_ops) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_DOUBLE, >5 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5009, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 7859 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op2_addr, IS_DOUBLE, >9 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4976, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 7861 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!zend_jit_cmp_double_double(Dst, opline, op1_addr, op2_addr, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr)) { return 0; } //| jmp >6 dasm_put(Dst, 5022); #line 7867 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!same_ops) { //|5: dasm_put(Dst, 498); #line 7870 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE))) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_LONG, >9 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4976, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 7872 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!zend_jit_cmp_double_long(Dst, opline, op1_addr, op2_addr, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr)) { return 0; } //| jmp >6 dasm_put(Dst, 5022); #line 7877 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code dasm_put(Dst, 386); #line 7879 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if ((op1_info & MAY_BE_DOUBLE) && !(op1_info & MAY_BE_LONG) && (op2_info & (MAY_BE_LONG|MAY_BE_DOUBLE))) { if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_DOUBLE)) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_DOUBLE, >9 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4976, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 7885 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op2_info & MAY_BE_DOUBLE) { if (!same_ops && (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_DOUBLE))) { if (!same_ops && (op2_info & MAY_BE_LONG)) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_DOUBLE, >3 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3239, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 7890 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op2_addr, IS_DOUBLE, >9 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4976, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 7892 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!zend_jit_cmp_double_double(Dst, opline, op1_addr, op2_addr, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr)) { return 0; } } if (!same_ops && (op2_info & MAY_BE_LONG)) { if (op2_info & MAY_BE_DOUBLE) { //|.cold_code dasm_put(Dst, 289); #line 7901 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|3: dasm_put(Dst, 346); #line 7903 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_DOUBLE|MAY_BE_LONG))) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_LONG, >9 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4976, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 7905 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!zend_jit_cmp_double_long(Dst, opline, op1_addr, op2_addr, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr)) { return 0; } if (op2_info & MAY_BE_DOUBLE) { //| jmp >6 //|.code dasm_put(Dst, 5003); #line 7912 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else if ((op2_info & MAY_BE_DOUBLE) && !(op2_info & MAY_BE_LONG) && (op1_info & (MAY_BE_LONG|MAY_BE_DOUBLE))) { if (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_DOUBLE)) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_DOUBLE, >9 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4976, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 7919 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & MAY_BE_DOUBLE) { if (!same_ops && (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_DOUBLE))) { if (!same_ops && (op1_info & MAY_BE_LONG)) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_DOUBLE, >3 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3239, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 7924 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_DOUBLE, >9 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4976, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); #line 7926 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!zend_jit_cmp_double_double(Dst, opline, op1_addr, op2_addr, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr)) { return 0; } } if (!same_ops && (op1_info & MAY_BE_LONG)) { if (op1_info & MAY_BE_DOUBLE) { //|.cold_code dasm_put(Dst, 289); #line 7935 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|3: dasm_put(Dst, 346); #line 7937 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_DOUBLE|MAY_BE_LONG))) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >9 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4976, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 7939 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!zend_jit_cmp_long_double(Dst, opline, op1_addr, op2_addr, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr)) { return 0; } if (op1_info & MAY_BE_DOUBLE) { //| jmp >6 //|.code dasm_put(Dst, 5003); #line 7946 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } if (has_slow || (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE))) || (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE)))) { if (has_slow) { //|.cold_code dasm_put(Dst, 289); #line 7955 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|9: dasm_put(Dst, 4072); #line 7956 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 7958 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(op1_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var); if (!zend_jit_spill_store(Dst, op1_addr, real_addr, op1_info, 1)) { return 0; } op1_addr = real_addr; } if (Z_MODE(op2_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var); if (!zend_jit_spill_store(Dst, op2_addr, real_addr, op2_info, 1)) { return 0; } op2_addr = real_addr; } //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 7973 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op1_type == IS_CV && (op1_info & MAY_BE_UNDEF)) { //| IF_NOT_Z_TYPE FCARG1a, IS_UNDEF, >1 //| mov FCARG1a, opline->op1.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 5027, offsetof(zval, u1.v.type), IS_UNDEF, opline->op1.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 7977 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| LOAD_ADDR_ZTS FCARG1a, executor_globals, uninitialized_zval if (IS_SIGNED_32BIT(&executor_globals.uninitialized_zval)) { dasm_put(Dst, 759, ((ptrdiff_t)&executor_globals.uninitialized_zval)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)&executor_globals.uninitialized_zval)), (unsigned int)((((ptrdiff_t)&executor_globals.uninitialized_zval))>>32)); } #line 7978 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 7979 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->op2_type == IS_CV && (op2_info & MAY_BE_UNDEF)) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_UNDEF, >1 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); #line 7982 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov T1, FCARG1a // save //| mov FCARG1a, opline->op2.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 5040, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_UNDEF, opline->op2.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 7985 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1a, T1 // restore //| LOAD_ADDR_ZTS FCARG2a, executor_globals, uninitialized_zval dasm_put(Dst, 3860); if (IS_SIGNED_32BIT(&executor_globals.uninitialized_zval)) { dasm_put(Dst, 712, ((ptrdiff_t)&executor_globals.uninitialized_zval)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)&executor_globals.uninitialized_zval)), (unsigned int)((((ptrdiff_t)&executor_globals.uninitialized_zval))>>32)); } #line 7987 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >2 //|1: //| LOAD_ZVAL_ADDR FCARG2a, op2_addr dasm_put(Dst, 5061); if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 7990 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 7991 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LOAD_ZVAL_ADDR FCARG2a, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 7993 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_compare, r0 if (MAY_USE_32BIT_ADDR(zend_compare)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_compare)); } else { if (IS_SIGNED_32BIT(zend_compare)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_compare)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_compare)), (unsigned int)((((ptrdiff_t)zend_compare))>>32)); } dasm_put(Dst, 59); } #line 7995 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((opline->opcode != ZEND_CASE && (opline->op1_type & (IS_VAR|IS_TMP_VAR)) && (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) || ((opline->op2_type & (IS_VAR|IS_TMP_VAR)) && (op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)))) { //| mov dword T1, eax // save dasm_put(Dst, 3422); #line 8001 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode != ZEND_CASE) { //| FREE_OP opline->op1_type, opline->op1, op1_info, 0, NULL if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 8003 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| FREE_OP opline->op2_type, opline->op2, op2_info, 0, NULL if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 8005 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception_undef_result(Dst, opline); } //| mov eax, dword T1 // restore dasm_put(Dst, 3444); #line 8009 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (may_throw) { #if ZTS //| mov dword T1, eax // save dasm_put(Dst, 3422); #line 8012 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #else if ((sizeof(void*) == 8 && !IS_SIGNED_32BIT(&EG(exception)))) { //| mov dword T1, eax // save dasm_put(Dst, 3422); #line 8015 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } #endif zend_jit_check_exception_undef_result(Dst, opline); #if ZTS //| mov eax, dword T1 // restore dasm_put(Dst, 3444); #line 8020 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #else if ((sizeof(void*) == 8 && !IS_SIGNED_32BIT(&EG(exception)))) { //| mov eax, dword T1 // restore dasm_put(Dst, 3444); #line 8023 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } #endif } if (!zend_jit_cmp_slow(Dst, opline, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr)) { return 0; } if (has_slow) { //| jmp >6 //|.code dasm_put(Dst, 5003); #line 8032 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //|6: dasm_put(Dst, 3290); #line 8036 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_identical(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_ssa_range *op1_range, zend_jit_addr op1_addr, uint32_t op2_info, zend_ssa_range *op2_range, zend_jit_addr op2_addr, zend_jit_addr res_addr, int may_throw, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr, bool skip_comparison) { uint32_t identical_label = (uint32_t)-1; uint32_t not_identical_label = (uint32_t)-1; if (smart_branch_opcode && !exit_addr) { if (opline->opcode != ZEND_IS_NOT_IDENTICAL) { if (smart_branch_opcode == ZEND_JMPZ) { not_identical_label = target_label; } else if (smart_branch_opcode == ZEND_JMPNZ) { identical_label = target_label; } else { ZEND_UNREACHABLE(); } } else { if (smart_branch_opcode == ZEND_JMPZ) { identical_label = target_label; } else if (smart_branch_opcode == ZEND_JMPNZ) { not_identical_label = target_label; } else { ZEND_UNREACHABLE(); } } } if ((op1_info & (MAY_BE_REF|MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_LONG && (op2_info & (MAY_BE_REF|MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_LONG) { if (!zend_jit_cmp_long_long(Dst, opline, op1_range, op1_addr, op2_range, op2_addr, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr, skip_comparison)) { return 0; } return 1; } else if ((op1_info & (MAY_BE_REF|MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_DOUBLE && (op2_info & (MAY_BE_REF|MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_DOUBLE) { if (!zend_jit_cmp_double_double(Dst, opline, op1_addr, op2_addr, res_addr, smart_branch_opcode, target_label, target_label2, exit_addr)) { return 0; } return 1; } if ((op1_info & MAY_BE_UNDEF) && (op2_info & MAY_BE_UNDEF)) { op1_info |= MAY_BE_NULL; op2_info |= MAY_BE_NULL; //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 8097 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_Z_TYPE FCARG1a, IS_UNDEF, >1 //|.cold_code dasm_put(Dst, 5068, offsetof(zval, u1.v.type), IS_UNDEF); #line 8099 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| // zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(CV_DEF_OF(EX_VAR_TO_NUM(opline->op1.var)))); //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 63); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 8102 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1d, opline->op1.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 2217, opline->op1.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 8104 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception_undef_result(Dst, opline); } //| LOAD_ADDR_ZTS FCARG1a, executor_globals, uninitialized_zval if (IS_SIGNED_32BIT(&executor_globals.uninitialized_zval)) { dasm_put(Dst, 759, ((ptrdiff_t)&executor_globals.uninitialized_zval)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)&executor_globals.uninitialized_zval)), (unsigned int)((((ptrdiff_t)&executor_globals.uninitialized_zval))>>32)); } #line 8108 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >1 //|.code dasm_put(Dst, 3691); #line 8110 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| LOAD_ZVAL_ADDR FCARG2a, op2_addr dasm_put(Dst, 63); if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 8112 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_Z_TYPE FCARG2a, IS_UNDEF, >1 //|.cold_code dasm_put(Dst, 5078, offsetof(zval, u1.v.type), IS_UNDEF); #line 8114 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| // zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(CV_DEF_OF(EX_VAR_TO_NUM(opline->op1.var)))); //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 63); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 8117 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov aword T1, FCARG1a // save //| mov FCARG1d, opline->op2.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 5088, opline->op2.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 8120 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception_undef_result(Dst, opline); } //| mov FCARG1a, aword T1 // restore //| LOAD_ADDR_ZTS FCARG2a, executor_globals, uninitialized_zval dasm_put(Dst, 3860); if (IS_SIGNED_32BIT(&executor_globals.uninitialized_zval)) { dasm_put(Dst, 712, ((ptrdiff_t)&executor_globals.uninitialized_zval)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)&executor_globals.uninitialized_zval)), (unsigned int)((((ptrdiff_t)&executor_globals.uninitialized_zval))>>32)); } #line 8125 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >1 //|.code dasm_put(Dst, 3691); #line 8127 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 8128 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (op1_info & MAY_BE_UNDEF) { op1_info |= MAY_BE_NULL; //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 8131 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_Z_TYPE FCARG1a, IS_UNDEF, >1 //|.cold_code dasm_put(Dst, 5068, offsetof(zval, u1.v.type), IS_UNDEF); #line 8133 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| // zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(CV_DEF_OF(EX_VAR_TO_NUM(opline->op1.var)))); //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 63); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 8136 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1d, opline->op1.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 2217, opline->op1.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 8138 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception_undef_result(Dst, opline); } //| LOAD_ADDR_ZTS FCARG1a, executor_globals, uninitialized_zval if (IS_SIGNED_32BIT(&executor_globals.uninitialized_zval)) { dasm_put(Dst, 759, ((ptrdiff_t)&executor_globals.uninitialized_zval)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)&executor_globals.uninitialized_zval)), (unsigned int)((((ptrdiff_t)&executor_globals.uninitialized_zval))>>32)); } #line 8142 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >1 //|.code dasm_put(Dst, 3691); #line 8144 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 8145 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op2_type != IS_CONST) { //| LOAD_ZVAL_ADDR FCARG2a, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 8147 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (op2_info & MAY_BE_UNDEF) { op2_info |= MAY_BE_NULL; //| LOAD_ZVAL_ADDR FCARG2a, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 8151 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_Z_TYPE FCARG2a, IS_UNDEF, >1 //|.cold_code dasm_put(Dst, 5078, offsetof(zval, u1.v.type), IS_UNDEF); #line 8153 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| // zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(CV_DEF_OF(EX_VAR_TO_NUM(opline->op1.var)))); //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 63); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 8156 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1d, opline->op2.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 2217, opline->op2.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 8158 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception_undef_result(Dst, opline); } //| LOAD_ADDR_ZTS FCARG2a, executor_globals, uninitialized_zval if (IS_SIGNED_32BIT(&executor_globals.uninitialized_zval)) { dasm_put(Dst, 712, ((ptrdiff_t)&executor_globals.uninitialized_zval)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)&executor_globals.uninitialized_zval)), (unsigned int)((((ptrdiff_t)&executor_globals.uninitialized_zval))>>32)); } #line 8162 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >1 //|.code dasm_put(Dst, 3691); #line 8164 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 8165 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op1_type != IS_CONST) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 8167 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if ((op1_info & op2_info & MAY_BE_ANY) != 0) { if (opline->op1_type != IS_CONST) { if (Z_MODE(op1_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var); if (!zend_jit_spill_store(Dst, op1_addr, real_addr, op1_info, 1)) { return 0; } op1_addr = real_addr; } } if (opline->op2_type != IS_CONST) { if (Z_MODE(op2_addr) == IS_REG) { zend_jit_addr real_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var); if (!zend_jit_spill_store(Dst, op2_addr, real_addr, op2_info, 1)) { return 0; } op2_addr = real_addr; } //| LOAD_ZVAL_ADDR FCARG2a, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 8187 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->op1_type != IS_CONST) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 8190 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if ((op1_info & op2_info & MAY_BE_ANY) == 0) { if ((opline->opcode != ZEND_CASE_STRICT && (opline->op1_type & (IS_VAR|IS_TMP_VAR)) && (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) || ((opline->op2_type & (IS_VAR|IS_TMP_VAR)) && (op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)))) { if (opline->opcode != ZEND_CASE_STRICT) { //| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 8201 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| FREE_OP opline->op2_type, opline->op2, op2_info, 1, opline if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 8203 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (smart_branch_opcode) { if (may_throw) { zend_jit_check_exception_undef_result(Dst, opline); } if (exit_addr) { if (smart_branch_opcode == ZEND_JMPZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 8211 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (not_identical_label != (uint32_t)-1) { //| jmp =>not_identical_label dasm_put(Dst, 1542, not_identical_label); #line 8214 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| SET_ZVAL_TYPE_INFO res_addr, (opline->opcode != ZEND_IS_NOT_IDENTICAL ? IS_FALSE : IS_TRUE) ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), (opline->opcode != ZEND_IS_NOT_IDENTICAL ? IS_FALSE : IS_TRUE)); #line 8217 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception(Dst); } } return 1; } if (opline->op1_type & (IS_CV|IS_VAR)) { //| ZVAL_DEREF FCARG1a, op1_info if (op1_info & MAY_BE_REF) { dasm_put(Dst, 5095, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 8226 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->op2_type & (IS_CV|IS_VAR)) { //| ZVAL_DEREF FCARG2a, op2_info if (op2_info & MAY_BE_REF) { dasm_put(Dst, 5113, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 8229 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (has_concrete_type(op1_info) && has_concrete_type(op2_info) && concrete_type(op1_info) == concrete_type(op2_info) && concrete_type(op1_info) <= IS_TRUE) { if (smart_branch_opcode) { if (exit_addr) { if (smart_branch_opcode == ZEND_JMPNZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 8239 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (identical_label != (uint32_t)-1) { //| jmp =>identical_label dasm_put(Dst, 1542, identical_label); #line 8242 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| SET_ZVAL_TYPE_INFO res_addr, (opline->opcode != ZEND_IS_NOT_IDENTICAL ? IS_TRUE : IS_FALSE) ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), (opline->opcode != ZEND_IS_NOT_IDENTICAL ? IS_TRUE : IS_FALSE)); #line 8245 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (Z_MODE(op1_addr) == IS_CONST_ZVAL && Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (zend_is_identical(Z_ZV(op1_addr), Z_ZV(op2_addr))) { if (smart_branch_opcode) { if (exit_addr) { if (smart_branch_opcode == ZEND_JMPNZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 8252 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (identical_label != (uint32_t)-1) { //| jmp =>identical_label dasm_put(Dst, 1542, identical_label); #line 8255 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| SET_ZVAL_TYPE_INFO res_addr, (opline->opcode != ZEND_IS_NOT_IDENTICAL ? IS_TRUE : IS_FALSE) ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), (opline->opcode != ZEND_IS_NOT_IDENTICAL ? IS_TRUE : IS_FALSE)); #line 8258 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (smart_branch_opcode) { if (exit_addr) { if (smart_branch_opcode == ZEND_JMPZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 8264 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (not_identical_label != (uint32_t)-1) { //| jmp =>not_identical_label dasm_put(Dst, 1542, not_identical_label); #line 8267 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| SET_ZVAL_TYPE_INFO res_addr, (opline->opcode != ZEND_IS_NOT_IDENTICAL ? IS_FALSE : IS_TRUE) ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), (opline->opcode != ZEND_IS_NOT_IDENTICAL ? IS_FALSE : IS_TRUE)); #line 8270 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else if (Z_MODE(op1_addr) == IS_CONST_ZVAL && Z_TYPE_P(Z_ZV(op1_addr)) <= IS_TRUE) { zval *val = Z_ZV(op1_addr); //| cmp byte [FCARG2a + offsetof(zval, u1.v.type)], Z_TYPE_P(val) dasm_put(Dst, 5131, offsetof(zval, u1.v.type), Z_TYPE_P(val)); #line 8276 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (smart_branch_opcode) { if (opline->op2_type == IS_VAR && (op2_info & MAY_BE_REF)) { //| jne >8 //| FREE_OP opline->op2_type, opline->op2, op2_info, 1, opline dasm_put(Dst, 3600); if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 8280 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception_undef_result(Dst, opline); } if (exit_addr && smart_branch_opcode == ZEND_JMPNZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 8285 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (identical_label != (uint32_t)-1) { //| jmp =>identical_label dasm_put(Dst, 1542, identical_label); #line 8287 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >9 dasm_put(Dst, 3591); #line 8289 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|8: dasm_put(Dst, 4117); #line 8291 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (exit_addr && smart_branch_opcode == ZEND_JMPNZ) { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 8293 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (identical_label != (uint32_t)-1) { //| je =>identical_label dasm_put(Dst, 4533, identical_label); #line 8295 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| je >9 dasm_put(Dst, 3586); #line 8297 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (opline->opcode != ZEND_IS_NOT_IDENTICAL) { //| sete al dasm_put(Dst, 4494); #line 8301 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| setne al dasm_put(Dst, 4498); #line 8303 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| movzx eax, al //| lea eax, [eax + 2] //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 4518, 2); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 8307 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if ((opline->op2_type & (IS_VAR|IS_TMP_VAR)) && (op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) { //| FREE_OP opline->op2_type, opline->op2, op2_info, 1, opline if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 8311 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception_undef_result(Dst, opline); } } if (exit_addr) { if (smart_branch_opcode == ZEND_JMPZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 8318 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (smart_branch_opcode && not_identical_label != (uint32_t)-1) { //| jmp =>not_identical_label dasm_put(Dst, 1542, not_identical_label); #line 8321 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (Z_MODE(op2_addr) == IS_CONST_ZVAL && Z_TYPE_P(Z_ZV(op2_addr)) <= IS_TRUE) { zval *val = Z_ZV(op2_addr); //| cmp byte [FCARG1a + offsetof(zval, u1.v.type)], Z_TYPE_P(val) dasm_put(Dst, 5136, offsetof(zval, u1.v.type), Z_TYPE_P(val)); #line 8326 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (smart_branch_opcode) { if (opline->opcode != ZEND_CASE_STRICT && opline->op1_type == IS_VAR && (op1_info & MAY_BE_REF)) { //| jne >8 //| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline dasm_put(Dst, 3600); if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 8331 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception_undef_result(Dst, opline); } if (exit_addr && smart_branch_opcode == ZEND_JMPNZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 8336 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (identical_label != (uint32_t)-1) { //| jmp =>identical_label dasm_put(Dst, 1542, identical_label); #line 8338 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >9 dasm_put(Dst, 3591); #line 8340 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|8: dasm_put(Dst, 4117); #line 8342 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (exit_addr && smart_branch_opcode == ZEND_JMPNZ) { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 8344 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (identical_label != (uint32_t)-1) { //| je =>identical_label dasm_put(Dst, 4533, identical_label); #line 8346 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| je >9 dasm_put(Dst, 3586); #line 8348 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (opline->opcode != ZEND_IS_NOT_IDENTICAL) { //| sete al dasm_put(Dst, 4494); #line 8352 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| setne al dasm_put(Dst, 4498); #line 8354 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| movzx eax, al //| lea eax, [eax + 2] //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 4518, 2); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 8358 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode != ZEND_CASE_STRICT && (opline->op1_type & (IS_VAR|IS_TMP_VAR)) && (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) { //| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 8363 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception_undef_result(Dst, opline); } } if (smart_branch_opcode) { if (exit_addr) { if (smart_branch_opcode == ZEND_JMPZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 8371 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (not_identical_label != (uint32_t)-1) { //| jmp =>not_identical_label dasm_put(Dst, 1542, not_identical_label); #line 8374 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else { if (opline->op1_type == IS_CONST) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 8379 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->op2_type == IS_CONST) { //| LOAD_ZVAL_ADDR FCARG2a, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 8382 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_is_identical, r0 if (MAY_USE_32BIT_ADDR(zend_is_identical)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_is_identical)); } else { if (IS_SIGNED_32BIT(zend_is_identical)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_is_identical)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_is_identical)), (unsigned int)((((ptrdiff_t)zend_is_identical))>>32)); } dasm_put(Dst, 59); } #line 8384 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((opline->opcode != ZEND_CASE_STRICT && (opline->op1_type & (IS_VAR|IS_TMP_VAR)) && (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) || ((opline->op2_type & (IS_VAR|IS_TMP_VAR)) && (op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)))) { //| mov aword T1, r0 // save dasm_put(Dst, 3421); #line 8390 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode != ZEND_CASE_STRICT) { //| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 8392 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| FREE_OP opline->op2_type, opline->op2, op2_info, 1, opline if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 8394 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception_undef_result(Dst, opline); } //| mov r0, aword T1 // restore dasm_put(Dst, 3443); #line 8398 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (smart_branch_opcode) { //| test al, al dasm_put(Dst, 5141); #line 8401 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { if (smart_branch_opcode == ZEND_JMPNZ) { //| jnz &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 8404 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jz &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 8406 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (not_identical_label != (uint32_t)-1) { //| jz =>not_identical_label dasm_put(Dst, 4533, not_identical_label); #line 8409 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (identical_label != (uint32_t)-1) { //| jmp =>identical_label dasm_put(Dst, 1542, identical_label); #line 8411 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (identical_label != (uint32_t)-1) { //| jnz =>identical_label dasm_put(Dst, 1787, identical_label); #line 8414 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| movzx eax, al dasm_put(Dst, 5144); #line 8417 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode != ZEND_IS_NOT_IDENTICAL) { //| lea eax, [eax + 2] dasm_put(Dst, 4521, 2); #line 8419 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| neg eax //| lea eax, [eax + 3] dasm_put(Dst, 5148, 3); #line 8422 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_ZVAL_TYPE_INFO res_addr, eax ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 8424 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //|9: dasm_put(Dst, 4072); #line 8428 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { zend_jit_check_exception(Dst); } return 1; } static int zend_jit_bool_jmpznz(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, zend_jit_addr res_addr, uint32_t target_label, uint32_t target_label2, int may_throw, zend_uchar branch_opcode, const void *exit_addr) { uint32_t true_label = -1; uint32_t false_label = -1; bool set_bool = 0; bool set_bool_not = 0; bool set_delayed = 0; bool jmp_done = 0; if (branch_opcode == ZEND_BOOL) { set_bool = 1; } else if (branch_opcode == ZEND_BOOL_NOT) { set_bool = 1; set_bool_not = 1; } else if (branch_opcode == ZEND_JMPZ) { false_label = target_label; } else if (branch_opcode == ZEND_JMPNZ) { true_label = target_label; } else if (branch_opcode == ZEND_JMPZ_EX) { set_bool = 1; false_label = target_label; } else if (branch_opcode == ZEND_JMPNZ_EX) { set_bool = 1; true_label = target_label; } else { ZEND_UNREACHABLE(); } if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (zend_is_true(Z_ZV(op1_addr))) { /* Always TRUE */ if (set_bool) { if (set_bool_not) { //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 8468 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 8470 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (true_label != (uint32_t)-1) { //| jmp =>true_label; dasm_put(Dst, 1542, true_label); #line 8474 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { /* Always FALSE */ if (set_bool) { if (set_bool_not) { //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 8480 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 8482 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (false_label != (uint32_t)-1) { //| jmp =>false_label; dasm_put(Dst, 1542, false_label); #line 8486 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } return 1; } if (opline->op1_type == IS_CV && (op1_info & MAY_BE_REF)) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 8493 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ZVAL_DEREF FCARG1a, op1_info if (op1_info & MAY_BE_REF) { dasm_put(Dst, 5095, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 8494 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE)) { if (!(op1_info & ((MAY_BE_UNDEF|MAY_BE_ANY)-MAY_BE_TRUE))) { /* Always TRUE */ if (set_bool) { if (set_bool_not) { //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 8503 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 8505 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (true_label != (uint32_t)-1) { //| jmp =>true_label; dasm_put(Dst, 1542, true_label); #line 8509 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (!(op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE)))) { /* Always FALSE */ if (set_bool) { if (set_bool_not) { //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 8516 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 8518 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else { //| CMP_ZVAL_TYPE op1_addr, IS_TRUE ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5155, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_TRUE); #line 8522 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & MAY_BE_LONG) && !(op1_info & MAY_BE_UNDEF) && !set_bool) { if (exit_addr) { if (branch_opcode == ZEND_JMPNZ) { //| jl >9 dasm_put(Dst, 5164); #line 8529 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jl &exit_addr dasm_put(Dst, 4549, (ptrdiff_t)(exit_addr)); #line 8531 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (false_label != (uint32_t)-1) { //| jl =>false_label dasm_put(Dst, 4553, false_label); #line 8534 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jl >9 dasm_put(Dst, 5164); #line 8536 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } jmp_done = 1; } else { //| jg >2 dasm_put(Dst, 4326); #line 8540 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!(op1_info & MAY_BE_TRUE)) { /* It's FALSE */ if (set_bool) { if (set_bool_not) { //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 8547 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 8549 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else { if (exit_addr) { if (set_bool) { //| jne >1 //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE dasm_put(Dst, 357); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 8556 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (branch_opcode == ZEND_JMPNZ || branch_opcode == ZEND_JMPNZ_EX) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 8558 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >9 dasm_put(Dst, 3591); #line 8560 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|1: //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE dasm_put(Dst, 63); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 8563 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (branch_opcode == ZEND_JMPZ || branch_opcode == ZEND_JMPZ_EX) { if (!(op1_info & (MAY_BE_UNDEF|MAY_BE_LONG))) { //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 8566 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else { if (branch_opcode == ZEND_JMPNZ || branch_opcode == ZEND_JMPNZ_EX) { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 8571 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (!(op1_info & (MAY_BE_UNDEF|MAY_BE_LONG))) { //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 8573 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| je >9 dasm_put(Dst, 3586); #line 8575 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else if (true_label != (uint32_t)-1 || false_label != (uint32_t)-1) { if (set_bool) { //| jne >1 //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE dasm_put(Dst, 357); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 8581 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (true_label != (uint32_t)-1) { //| jmp =>true_label dasm_put(Dst, 1542, true_label); #line 8583 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >9 dasm_put(Dst, 3591); #line 8585 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|1: //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE dasm_put(Dst, 63); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 8588 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (true_label != (uint32_t)-1) { //| je =>true_label dasm_put(Dst, 4533, true_label); #line 8591 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (!(op1_info & (MAY_BE_UNDEF|MAY_BE_LONG))) { //| jne =>false_label dasm_put(Dst, 1787, false_label); #line 8593 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" jmp_done = 1; } else { //| je >9 dasm_put(Dst, 3586); #line 8596 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else if (set_bool) { //| sete al //| movzx eax, al dasm_put(Dst, 5169); #line 8601 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (set_bool_not) { //| neg eax //| add eax, 3 dasm_put(Dst, 5176); #line 8604 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| add eax, 2 dasm_put(Dst, 4564); #line 8606 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if ((op1_info & MAY_BE_UNDEF) && (op1_info & MAY_BE_ANY)) { set_delayed = 1; } else { //| SET_ZVAL_TYPE_INFO res_addr, eax ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 8611 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } } /* It's FALSE, but may be UNDEF */ if (op1_info & MAY_BE_UNDEF) { if (op1_info & MAY_BE_ANY) { if (set_delayed) { //| CMP_ZVAL_TYPE op1_addr, IS_UNDEF ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 8621 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 5155, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 8622 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jz >1 dasm_put(Dst, 5183, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 8623 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_ZVAL_TYPE op1_addr, IS_UNDEF, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5195, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); #line 8625 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.cold_code dasm_put(Dst, 289); #line 8627 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 8628 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov FCARG1d, opline->op1.var //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 2217, opline->op1.var); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 8631 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_undefined_op_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 8632 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { if (!zend_jit_check_exception_undef_result(Dst, opline)) { return 0; } } if (exit_addr) { if (branch_opcode == ZEND_JMPZ || branch_opcode == ZEND_JMPZ_EX) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 8642 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (false_label != (uint32_t)-1) { //| jmp =>false_label dasm_put(Dst, 1542, false_label); #line 8645 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & MAY_BE_ANY) { if (exit_addr) { if (branch_opcode == ZEND_JMPNZ || branch_opcode == ZEND_JMPNZ_EX) { //| jmp >9 dasm_put(Dst, 3591); #line 8650 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (false_label == (uint32_t)-1) { //| jmp >9 dasm_put(Dst, 3591); #line 8653 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code dasm_put(Dst, 386); #line 8655 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!jmp_done) { if (exit_addr) { if (branch_opcode == ZEND_JMPNZ || branch_opcode == ZEND_JMPNZ_EX) { if (op1_info & MAY_BE_LONG) { //| jmp >9 dasm_put(Dst, 3591); #line 8663 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (op1_info & MAY_BE_LONG) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 8666 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (false_label != (uint32_t)-1) { //| jmp =>false_label dasm_put(Dst, 1542, false_label); #line 8669 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if ((op1_info & MAY_BE_LONG) || (op1_info & MAY_BE_ANY) == MAY_BE_DOUBLE) { //| jmp >9 dasm_put(Dst, 3591); #line 8671 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } } if (op1_info & MAY_BE_LONG) { //|2: dasm_put(Dst, 1944); #line 8678 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG))) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >2 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2131, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 8680 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_MODE(op1_addr) == IS_REG) { //| test Ra(Z_REG(op1_addr)), Ra(Z_REG(op1_addr)) dasm_put(Dst, 3464, (Z_REG(op1_addr)), (Z_REG(op1_addr))); #line 8683 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LONG_OP_WITH_CONST, cmp, op1_addr, Z_L(0) if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (!IS_SIGNED_32BIT(Z_L(0))) { dasm_put(Dst, 4473, (unsigned int)(Z_L(0)), (unsigned int)((Z_L(0))>>32), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 4485, (Z_REG(op1_addr)), Z_OFFSET(op1_addr), Z_L(0)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (!IS_SIGNED_32BIT(Z_L(0))) { dasm_put(Dst, 4437, (unsigned int)(Z_L(0)), (unsigned int)((Z_L(0))>>32), (Z_REG(op1_addr))); } else { dasm_put(Dst, 4447, (Z_REG(op1_addr)), Z_L(0)); } } else { ZEND_UNREACHABLE(); } #line 8685 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (set_bool) { //| setne al //| movzx eax, al dasm_put(Dst, 5208); #line 8689 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (set_bool_not) { //| neg eax //| add eax, 3 dasm_put(Dst, 5176); #line 8692 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| lea eax, [eax + 2] dasm_put(Dst, 4521, 2); #line 8694 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_ZVAL_TYPE_INFO res_addr, eax ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 8696 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (exit_addr) { if (branch_opcode == ZEND_JMPNZ || branch_opcode == ZEND_JMPNZ_EX) { //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 8700 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 8702 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (true_label != (uint32_t)-1 || false_label != (uint32_t)-1) { if (true_label != (uint32_t)-1) { //| jne =>true_label dasm_put(Dst, 1787, true_label); #line 8706 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (false_label != (uint32_t)-1) { //| jmp =>false_label dasm_put(Dst, 1542, false_label); #line 8708 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| je =>false_label dasm_put(Dst, 4533, false_label); #line 8711 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } if ((op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG))) == MAY_BE_DOUBLE) { if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG)) { //|.cold_code dasm_put(Dst, 289); #line 8718 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|2: dasm_put(Dst, 1944); #line 8720 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (CAN_USE_AVX()) { //| vxorps xmm0, xmm0, xmm0 dasm_put(Dst, 5215); #line 8722 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| xorps xmm0, xmm0 dasm_put(Dst, 5221); #line 8724 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| DOUBLE_CMP ZREG_XMM0, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 4883, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 4893, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 4903, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 4911, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 4919, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 4931, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 4943, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 4953, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } #line 8726 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (set_bool) { if (exit_addr) { if (branch_opcode == ZEND_JMPNZ || branch_opcode == ZEND_JMPNZ_EX) { //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 8731 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jp &exit_addr //| jne &exit_addr //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE dasm_put(Dst, 5225, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE, (ptrdiff_t)(exit_addr), (ptrdiff_t)(exit_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 8734 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jp >1 //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE dasm_put(Dst, 4582); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 8737 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| je &exit_addr //|1: //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE dasm_put(Dst, 5240, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE, (ptrdiff_t)(exit_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 8740 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (false_label != (uint32_t)-1) { // JMPZ_EX (p=>true, z=>false, false=>jmp) //| jp >1 //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE dasm_put(Dst, 4582); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 8744 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| je => false_label //|1: //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE dasm_put(Dst, 4674, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE, false_label); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 8747 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (true_label != (uint32_t)-1) { // JMPNZ_EX (p=>true, z=>false, true=>jmp) //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 8749 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jp => true_label //| jne => true_label //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE dasm_put(Dst, 5254, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE, true_label, true_label); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 8752 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (set_bool_not) { // BOOL_NOT (p=>false, z=>true) //| mov eax, IS_FALSE //| jp >1 //| jne >1 //| mov eax, IS_TRUE //|1: //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 5269, IS_FALSE, IS_TRUE); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 8759 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { // BOOL (p=>true, z=>false) //| mov eax, IS_TRUE //| jp >1 //| jne >1 //| mov eax, IS_FALSE //|1: //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 5269, IS_TRUE, IS_FALSE); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 8766 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG)) { //| jmp >9 //|.code dasm_put(Dst, 4046); #line 8770 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (exit_addr) { if (branch_opcode == ZEND_JMPNZ || branch_opcode == ZEND_JMPNZ_EX) { //| jp &exit_addr //| jne &exit_addr //|1: dasm_put(Dst, 5284, (ptrdiff_t)(exit_addr), (ptrdiff_t)(exit_addr)); #line 8777 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jp >1 //| je &exit_addr //|1: dasm_put(Dst, 4637, (ptrdiff_t)(exit_addr)); #line 8781 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG)) { //| jmp >9 dasm_put(Dst, 3591); #line 8784 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { ZEND_ASSERT(true_label != (uint32_t)-1 || false_label != (uint32_t)-1); if (false_label != (uint32_t)-1 ) { //| jp >1 //| je => false_label //|1: dasm_put(Dst, 4587, false_label); #line 8791 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (true_label != (uint32_t)-1) { //| jmp =>true_label dasm_put(Dst, 1542, true_label); #line 8793 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG)) { //| jmp >9 dasm_put(Dst, 3591); #line 8795 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| jp => true_label //| jne => true_label dasm_put(Dst, 5262, true_label, true_label); #line 8799 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG)) { //| jmp >9 dasm_put(Dst, 3591); #line 8801 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG)) { //|.code dasm_put(Dst, 386); #line 8806 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else if (op1_info & (MAY_BE_ANY - (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG))) { if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG)) { //|.cold_code dasm_put(Dst, 289); #line 8811 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 8812 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 8815 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 8817 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_is_true, r0 if (MAY_USE_32BIT_ADDR(zend_is_true)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_is_true)); } else { if (IS_SIGNED_32BIT(zend_is_true)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_is_true)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_is_true)), (unsigned int)((((ptrdiff_t)zend_is_true))>>32)); } dasm_put(Dst, 59); } #line 8818 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((opline->op1_type & (IS_VAR|IS_TMP_VAR)) && (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var); if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| IF_NOT_ZVAL_REFCOUNTED op1_addr, >3 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5293, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); #line 8825 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| GET_ZVAL_PTR FCARG1a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 8827 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_DELREF FCARG1a //| jnz >3 //| mov aword T1, r0 // save //| ZVAL_DTOR_FUNC op1_info, opline dasm_put(Dst, 5307, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); #line 8831 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov r0, aword T1 // restore //|3: dasm_put(Dst, 5326); #line 8833 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (may_throw) { //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r1 if (IS_SIGNED_32BIT(&executor_globals.exception)) { dasm_put(Dst, 71, &executor_globals.exception); } else { dasm_put(Dst, 1708, (unsigned int)(((ptrdiff_t)&executor_globals.exception)), (unsigned int)((((ptrdiff_t)&executor_globals.exception))>>32)); } #line 8836 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne ->exception_handler_undef dasm_put(Dst, 1551); #line 8837 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (set_bool) { if (set_bool_not) { //| neg eax //| add eax, 3 dasm_put(Dst, 5176); #line 8843 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| add eax, 2 dasm_put(Dst, 4564); #line 8845 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_ZVAL_TYPE_INFO res_addr, eax ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 8847 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { //| CMP_ZVAL_TYPE res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5155, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type), IS_FALSE); #line 8849 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (branch_opcode == ZEND_JMPNZ || branch_opcode == ZEND_JMPNZ_EX) { //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 8851 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 8853 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (true_label != (uint32_t)-1 || false_label != (uint32_t)-1) { //| CMP_ZVAL_TYPE res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5155, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type), IS_FALSE); #line 8856 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (true_label != (uint32_t)-1) { //| jne =>true_label dasm_put(Dst, 1787, true_label); #line 8858 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (false_label != (uint32_t)-1) { //| jmp =>false_label dasm_put(Dst, 1542, false_label); #line 8860 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG)) { //| jmp >9 dasm_put(Dst, 3591); #line 8862 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| je =>false_label dasm_put(Dst, 4533, false_label); #line 8865 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG)) { //| jmp >9 //|.code dasm_put(Dst, 4046); #line 8870 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| test r0, r0 dasm_put(Dst, 3529); #line 8873 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { if (branch_opcode == ZEND_JMPNZ || branch_opcode == ZEND_JMPNZ_EX) { //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 8876 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG)) { //| jmp >9 dasm_put(Dst, 3591); #line 8878 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 8881 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG)) { //| jmp >9 dasm_put(Dst, 3591); #line 8883 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else if (true_label != (uint32_t)-1) { //| jne =>true_label dasm_put(Dst, 1787, true_label); #line 8887 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (false_label != (uint32_t)-1) { //| jmp =>false_label dasm_put(Dst, 1542, false_label); #line 8889 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG)) { //| jmp >9 dasm_put(Dst, 3591); #line 8891 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| je =>false_label dasm_put(Dst, 4533, false_label); #line 8894 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG)) { //| jmp >9 dasm_put(Dst, 3591); #line 8896 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG)) { //|.code dasm_put(Dst, 386); #line 8901 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } //|9: dasm_put(Dst, 4072); #line 8906 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_qm_assign(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, zend_jit_addr op1_def_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr) { if (op1_addr != op1_def_addr) { if (!zend_jit_update_regs(Dst, opline->op1.var, op1_addr, op1_def_addr, op1_info)) { return 0; } if (Z_MODE(op1_def_addr) == IS_REG && Z_MODE(op1_addr) != IS_REG) { op1_addr = op1_def_addr; } } if (!zend_jit_simple_assign(Dst, opline, res_addr, res_use_info, res_info, opline->op1_type, op1_addr, op1_info, 0, 0, 0, 1)) { return 0; } if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, res_info)) { return 0; } if (op1_info & MAY_BE_UNDEF) { zend_jit_check_exception(Dst); } return 1; } static int zend_jit_assign(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_use_addr, uint32_t op1_def_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, zend_jit_addr op2_def_addr, uint32_t res_info, zend_jit_addr res_addr, int may_throw) { ZEND_ASSERT(opline->op1_type == IS_CV); if (op2_addr != op2_def_addr) { if (!zend_jit_update_regs(Dst, opline->op2.var, op2_addr, op2_def_addr, op2_info)) { return 0; } if (Z_MODE(op2_def_addr) == IS_REG && Z_MODE(op2_addr) != IS_REG) { op2_addr = op2_def_addr; } } if (Z_MODE(op1_addr) != IS_REG && Z_MODE(op1_use_addr) == IS_REG && !Z_LOAD(op1_use_addr) && !Z_STORE(op1_use_addr)) { /* Force type update */ op1_info |= MAY_BE_UNDEF; } if (!zend_jit_assign_to_variable(Dst, opline, op1_use_addr, op1_addr, op1_info, op1_def_info, opline->op2_type, op2_addr, op2_info, res_addr, may_throw)) { return 0; } if (!zend_jit_store_var_if_necessary_ex(Dst, opline->op1.var, op1_addr, op1_def_info, op1_use_addr, op1_info)) { return 0; } if (opline->result_type != IS_UNUSED) { if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, res_info)) { return 0; } } return 1; } /* copy of hidden zend_closure */ typedef struct _zend_closure { zend_object std; zend_function func; zval this_ptr; zend_class_entry *called_scope; zif_handler orig_internal_handler; } zend_closure; static int zend_jit_stack_check(dasm_State **Dst, const zend_op *opline, uint32_t used_stack) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| // Check Stack Overflow //| MEM_LOAD_ZTS r1, aword, executor_globals, vm_stack_end, r0 if (IS_SIGNED_32BIT(&executor_globals.vm_stack_end)) { dasm_put(Dst, 5333, &executor_globals.vm_stack_end); } else { dasm_put(Dst, 5339, (unsigned int)(((ptrdiff_t)&executor_globals.vm_stack_end)), (unsigned int)((((ptrdiff_t)&executor_globals.vm_stack_end))>>32)); } #line 8989 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| MEM_LOAD_OP_ZTS sub, r1, aword, executor_globals, vm_stack_top, r0 if (IS_SIGNED_32BIT(&executor_globals.vm_stack_top)) { dasm_put(Dst, 5347, &executor_globals.vm_stack_top); } else { dasm_put(Dst, 5353, (unsigned int)(((ptrdiff_t)&executor_globals.vm_stack_top)), (unsigned int)((((ptrdiff_t)&executor_globals.vm_stack_top))>>32)); } #line 8990 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp r1, used_stack //| jb &exit_addr dasm_put(Dst, 5361, used_stack, (ptrdiff_t)(exit_addr)); #line 8992 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_push_call_frame(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, zend_function *func, bool is_closure, bool delayed_fetch_this, int checked_stack) { uint32_t used_stack; bool stack_check = 1; if (func) { used_stack = zend_vm_calc_used_stack(opline->extended_value, func); if ((int)used_stack <= checked_stack) { stack_check = 0; } } else { used_stack = (ZEND_CALL_FRAME_SLOT + opline->extended_value + ZEND_OBSERVER_ENABLED) * sizeof(zval); //| // if (EXPECTED(ZEND_USER_CODE(func->type))) { if (!is_closure) { //| test byte [r0 + offsetof(zend_function, type)], 1 //| mov FCARG1a, used_stack //| jnz >1 dasm_put(Dst, 5370, offsetof(zend_function, type), used_stack); #line 9014 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov FCARG1a, used_stack dasm_put(Dst, 759, used_stack); #line 9016 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // used_stack += (func->op_array.last_var + func->op_array.T - MIN(func->op_array.num_args, num_args)) * sizeof(zval); //| mov edx, opline->extended_value dasm_put(Dst, 5384, opline->extended_value); #line 9019 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!is_closure) { //| cmp edx, dword [r0 + offsetof(zend_function, op_array.num_args)] //| cmova edx, dword [r0 + offsetof(zend_function, op_array.num_args)] //| sub edx, dword [r0 + offsetof(zend_function, op_array.last_var)] //| sub edx, dword [r0 + offsetof(zend_function, op_array.T)] dasm_put(Dst, 5387, offsetof(zend_function, op_array.num_args), offsetof(zend_function, op_array.num_args), offsetof(zend_function, op_array.last_var), offsetof(zend_function, op_array.T)); #line 9024 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| cmp edx, dword [r0 + offsetof(zend_closure, func.op_array.num_args)] //| cmova edx, dword [r0 + offsetof(zend_closure, func.op_array.num_args)] //| sub edx, dword [r0 + offsetof(zend_closure, func.op_array.last_var)] //| sub edx, dword [r0 + offsetof(zend_closure, func.op_array.T)] dasm_put(Dst, 5387, offsetof(zend_closure, func.op_array.num_args), offsetof(zend_closure, func.op_array.num_args), offsetof(zend_closure, func.op_array.last_var), offsetof(zend_closure, func.op_array.T)); #line 9029 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| shl edx, 4 //|.if X64 //| movsxd r2, edx //|.endif //| sub FCARG1a, r2 //|1: dasm_put(Dst, 5401); #line 9036 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } zend_jit_start_reuse_ip(); //| // if (UNEXPECTED(used_stack > (size_t)(((char*)EG(vm_stack_end)) - (char*)call))) { //| MEM_LOAD_ZTS RX, aword, executor_globals, vm_stack_top, RX if (IS_SIGNED_32BIT(&executor_globals.vm_stack_top)) { dasm_put(Dst, 422, &executor_globals.vm_stack_top); } else { dasm_put(Dst, 5413, (unsigned int)(((ptrdiff_t)&executor_globals.vm_stack_top)), (unsigned int)((((ptrdiff_t)&executor_globals.vm_stack_top))>>32)); } #line 9042 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (stack_check) { //| // Check Stack Overflow //| MEM_LOAD_ZTS r2, aword, executor_globals, vm_stack_end, r2 if (IS_SIGNED_32BIT(&executor_globals.vm_stack_end)) { dasm_put(Dst, 5421, &executor_globals.vm_stack_end); } else { dasm_put(Dst, 5427, (unsigned int)(((ptrdiff_t)&executor_globals.vm_stack_end)), (unsigned int)((((ptrdiff_t)&executor_globals.vm_stack_end))>>32)); } #line 9046 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| sub r2, RX dasm_put(Dst, 5435); #line 9047 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (func) { //| cmp r2, used_stack dasm_put(Dst, 5440, used_stack); #line 9049 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| cmp r2, FCARG1a dasm_put(Dst, 5446); #line 9051 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| jb &exit_addr dasm_put(Dst, 4615, (ptrdiff_t)(exit_addr)); #line 9062 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jb >1 //| // EG(vm_stack_top) = (zval*)((char*)call + used_stack); //|.cold_code dasm_put(Dst, 5451); #line 9066 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 9067 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (func) { //| mov FCARG1d, used_stack dasm_put(Dst, 2217, used_stack); #line 9069 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } #ifdef _WIN32 if (0) { #else if (opline->opcode == ZEND_INIT_FCALL && func && func->type == ZEND_INTERNAL_FUNCTION) { #endif //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 9076 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_int_extend_stack_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_int_extend_stack_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_int_extend_stack_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_int_extend_stack_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_int_extend_stack_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_int_extend_stack_helper)), (unsigned int)((((ptrdiff_t)zend_jit_int_extend_stack_helper))>>32)); } dasm_put(Dst, 59); } #line 9077 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (!is_closure) { if (func && op_array == &func->op_array && (func->op_array.fn_flags & ZEND_ACC_IMMUTABLE) && (sizeof(void*) != 8 || IS_SIGNED_32BIT(func))) { //| LOAD_ADDR FCARG2a, func if (IS_SIGNED_32BIT(func)) { dasm_put(Dst, 712, ((ptrdiff_t)func)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32)); } #line 9084 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov FCARG2a, r0 dasm_put(Dst, 3328); #line 9086 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| lea FCARG2a, aword [r0 + offsetof(zend_closure, func)] dasm_put(Dst, 5457, offsetof(zend_closure, func)); #line 9089 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 9091 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_extend_stack_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_extend_stack_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_extend_stack_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_extend_stack_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_extend_stack_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_extend_stack_helper)), (unsigned int)((((ptrdiff_t)zend_jit_extend_stack_helper))>>32)); } dasm_put(Dst, 59); } #line 9092 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov RX, r0 //| jmp >1 //|.code dasm_put(Dst, 5462); #line 9096 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (func) { //| MEM_UPDATE_ZTS add, aword, executor_globals, vm_stack_top, used_stack, r2 if (IS_SIGNED_32BIT(&executor_globals.vm_stack_top)) { dasm_put(Dst, 5471, &executor_globals.vm_stack_top, used_stack); } else { dasm_put(Dst, 5479, (unsigned int)(((ptrdiff_t)&executor_globals.vm_stack_top)), (unsigned int)((((ptrdiff_t)&executor_globals.vm_stack_top))>>32), used_stack); } #line 9101 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| MEM_UPDATE_ZTS add, aword, executor_globals, vm_stack_top, FCARG1a, r2 if (IS_SIGNED_32BIT(&executor_globals.vm_stack_top)) { dasm_put(Dst, 5488, &executor_globals.vm_stack_top); } else { dasm_put(Dst, 5494, (unsigned int)(((ptrdiff_t)&executor_globals.vm_stack_top)), (unsigned int)((((ptrdiff_t)&executor_globals.vm_stack_top))>>32)); } #line 9103 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // zend_vm_init_call_frame(call, call_info, func, num_args, called_scope, object); if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || opline->opcode != ZEND_INIT_METHOD_CALL) { //| // ZEND_SET_CALL_INFO(call, 0, call_info); //| mov dword EX:RX->This.u1.type_info, (IS_UNDEF | ZEND_CALL_NESTED_FUNCTION) dasm_put(Dst, 5502, Dt1(->This.u1.type_info), (IS_UNDEF | ZEND_CALL_NESTED_FUNCTION)); #line 9108 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } #ifdef _WIN32 if (0) { #else if (opline->opcode == ZEND_INIT_FCALL && func && func->type == ZEND_INTERNAL_FUNCTION) { #endif //| // call->func = func; //|1: //| ADDR_STORE aword EX:RX->func, func, r1 dasm_put(Dst, 63); if (IS_SIGNED_32BIT(func)) { dasm_put(Dst, 5508, Dt1(->func), ((ptrdiff_t)func)); } else { dasm_put(Dst, 5514, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32), Dt1(->func)); } #line 9117 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (!is_closure) { //| // call->func = func; if (func && op_array == &func->op_array && (func->op_array.fn_flags & ZEND_ACC_IMMUTABLE) && (sizeof(void*) != 8 || IS_SIGNED_32BIT(func))) { //| ADDR_STORE aword EX:RX->func, func, r1 if (IS_SIGNED_32BIT(func)) { dasm_put(Dst, 5508, Dt1(->func), ((ptrdiff_t)func)); } else { dasm_put(Dst, 5514, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32), Dt1(->func)); } #line 9125 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov aword EX:RX->func, r0 dasm_put(Dst, 1509, Dt1(->func)); #line 9127 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| // call->func = &closure->func; //| lea r1, aword [r0 + offsetof(zend_closure, func)] //| mov aword EX:RX->func, r1 dasm_put(Dst, 5523, offsetof(zend_closure, func), Dt1(->func)); #line 9132 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|1: dasm_put(Dst, 63); #line 9134 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode == ZEND_INIT_METHOD_CALL) { //| // Z_PTR(call->This) = obj; //| mov r1, aword T1 //| mov aword EX:RX->This.value.ptr, r1 dasm_put(Dst, 5532, Dt1(->This.value.ptr)); #line 9139 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op1_type == IS_UNUSED || delayed_fetch_this) { //| // call->call_info |= ZEND_CALL_HAS_THIS; if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { //| mov dword EX:RX->This.u1.type_info, ZEND_CALL_HAS_THIS dasm_put(Dst, 5502, Dt1(->This.u1.type_info), ZEND_CALL_HAS_THIS); #line 9143 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| or dword EX:RX->This.u1.type_info, ZEND_CALL_HAS_THIS dasm_put(Dst, 5541, Dt1(->This.u1.type_info), ZEND_CALL_HAS_THIS); #line 9145 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (opline->op1_type == IS_CV) { //| // GC_ADDREF(obj); //| add dword [r1], 1 dasm_put(Dst, 5547); #line 9150 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // call->call_info |= ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS; if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { //| mov dword EX:RX->This.u1.type_info, (ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS) dasm_put(Dst, 5502, Dt1(->This.u1.type_info), (ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS)); #line 9154 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| or dword EX:RX->This.u1.type_info, (ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS) dasm_put(Dst, 5541, Dt1(->This.u1.type_info), (ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS)); #line 9156 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else if (!is_closure) { //| // Z_CE(call->This) = called_scope; //| mov aword EX:RX->This.value.ptr, 0 dasm_put(Dst, 1496, Dt1(->This.value.ptr)); #line 9161 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (opline->op2_type == IS_CV) { //| // GC_ADDREF(closure); //| add dword [r0], 1 dasm_put(Dst, 5551); #line 9165 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // object_or_called_scope = closure->called_scope; //| mov r1, aword [r0 + offsetof(zend_closure, called_scope)] //| mov aword EX:RX->This.value.ptr, r1 //| // call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC | ZEND_CALL_CLOSURE | //| // (closure->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE); //| mov edx, dword [r0 + offsetof(zend_closure, func.common.fn_flags)] //| and edx, ZEND_ACC_FAKE_CLOSURE //| or edx, (ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC | ZEND_CALL_CLOSURE) //| // if (Z_TYPE(closure->this_ptr) != IS_UNDEF) { //| cmp byte [r0 + offsetof(zend_closure, this_ptr.u1.v.type)], IS_UNDEF //| jz >1 //| // call_info |= ZEND_CALL_HAS_THIS; //| or edx, ZEND_CALL_HAS_THIS //| // object_or_called_scope = Z_OBJ(closure->this_ptr); //| mov r1, aword [r0 + offsetof(zend_closure, this_ptr.value.ptr)] //|1: //| // ZEND_SET_CALL_INFO(call, 0, call_info); //| or dword EX:RX->This.u1.type_info, edx //| // Z_PTR(call->This) = object_or_called_scope; //| mov aword EX:RX->This.value.ptr, r1 //| cmp aword [r0 + offsetof(zend_closure, func.op_array.run_time_cache__ptr)], 0 //| jnz >1 //| lea FCARG1a, aword [r0 + offsetof(zend_closure, func)] //| EXT_CALL zend_jit_init_func_run_time_cache_helper, r0 dasm_put(Dst, 5555, offsetof(zend_closure, called_scope), Dt1(->This.value.ptr), offsetof(zend_closure, func.common.fn_flags), ZEND_ACC_FAKE_CLOSURE, (ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC | ZEND_CALL_CLOSURE), offsetof(zend_closure, this_ptr.u1.v.type), IS_UNDEF, ZEND_CALL_HAS_THIS, offsetof(zend_closure, this_ptr.value.ptr), Dt1(->This.u1.type_info), Dt1(->This.value.ptr), offsetof(zend_closure, func.op_array.run_time_cache__ptr), offsetof(zend_closure, func)); if (MAY_USE_32BIT_ADDR(zend_jit_init_func_run_time_cache_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_init_func_run_time_cache_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_init_func_run_time_cache_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_init_func_run_time_cache_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_init_func_run_time_cache_helper)), (unsigned int)((((ptrdiff_t)zend_jit_init_func_run_time_cache_helper))>>32)); } dasm_put(Dst, 59); } #line 9190 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 9191 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // ZEND_CALL_NUM_ARGS(call) = num_args; //| mov dword EX:RX->This.u2.num_args, opline->extended_value dasm_put(Dst, 5502, Dt1(->This.u2.num_args), opline->extended_value); #line 9194 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_init_fcall_guard(dasm_State **Dst, uint32_t level, const zend_function *func, const zend_op *to_opline) { int32_t exit_point; const void *exit_addr; if (func->type == ZEND_INTERNAL_FUNCTION) { #ifdef ZEND_WIN32 // TODO: ASLR may cause different addresses in different workers ??? return 0; #endif } else if (func->type == ZEND_USER_FUNCTION) { if (!zend_accel_in_shm(func->op_array.opcodes)) { /* op_array and op_array->opcodes are not persistent. We can't link. */ return 0; } } else { ZEND_UNREACHABLE(); return 0; } exit_point = zend_jit_trace_get_exit_point(to_opline, ZEND_JIT_EXIT_POLYMORPHISM); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| // call = EX(call); //| mov r1, EX->call dasm_put(Dst, 5611, Dt1(->call)); #line 9225 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" while (level > 0) { //| mov r1, EX:r1->prev_execute_data dasm_put(Dst, 5616, Dt1(->prev_execute_data)); #line 9227 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" level--; } if (func->type == ZEND_USER_FUNCTION && (!(func->common.fn_flags & ZEND_ACC_IMMUTABLE) || (func->common.fn_flags & ZEND_ACC_CLOSURE) || !func->common.function_name)) { const zend_op *opcodes = func->op_array.opcodes; //| mov r1, aword EX:r1->func //| .if X64 dasm_put(Dst, 5616, Dt1(->func)); if (!IS_SIGNED_32BIT(opcodes)) { #line 9239 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov64 r2, ((ptrdiff_t)opcodes) //| cmp aword [r1 + offsetof(zend_op_array, opcodes)], r2 dasm_put(Dst, 5621, (unsigned int)(((ptrdiff_t)opcodes)), (unsigned int)((((ptrdiff_t)opcodes))>>32), offsetof(zend_op_array, opcodes)); } else { #line 9242 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp aword [r1 + offsetof(zend_op_array, opcodes)], opcodes dasm_put(Dst, 5630, offsetof(zend_op_array, opcodes), opcodes); } #line 9244 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| .else //| cmp aword [r1 + offsetof(zend_op_array, opcodes)], opcodes //| .endif //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 9248 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| .if X64 if (!IS_SIGNED_32BIT(func)) { //| mov64 r2, ((ptrdiff_t)func) //| cmp aword EX:r1->func, r2 dasm_put(Dst, 5621, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32), Dt1(->func)); } else { #line 9254 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp aword EX:r1->func, func dasm_put(Dst, 5630, Dt1(->func), func); } #line 9256 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| .else //| cmp aword EX:r1->func, func //| .endif //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 9260 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_init_fcall(dasm_State **Dst, const zend_op *opline, uint32_t b, const zend_op_array *op_array, zend_ssa *ssa, const zend_ssa_op *ssa_op, int call_level, zend_jit_trace_rec *trace, int checked_stack) { zend_func_info *info = ZEND_FUNC_INFO(op_array); zend_call_info *call_info = NULL; zend_function *func = NULL; if (delayed_call_chain) { if (!zend_jit_save_call_chain(Dst, delayed_call_level)) { return 0; } } if (info) { call_info = info->callee_info; while (call_info && call_info->caller_init_opline != opline) { call_info = call_info->next_callee; } if (call_info && call_info->callee_func && !call_info->is_prototype) { func = call_info->callee_func; } } if (!func && trace && trace->op == ZEND_JIT_TRACE_INIT_CALL) { #ifdef _WIN32 /* ASLR */ if (trace->func->type != ZEND_INTERNAL_FUNCTION) { func = (zend_function*)trace->func; } #else func = (zend_function*)trace->func; #endif } #ifdef _WIN32 if (0) { #else if (opline->opcode == ZEND_INIT_FCALL && func && func->type == ZEND_INTERNAL_FUNCTION) { #endif /* load constant address later */ } else if (func && op_array == &func->op_array) { /* recursive call */ if (!(func->op_array.fn_flags & ZEND_ACC_IMMUTABLE) || (sizeof(void*) == 8 && !IS_SIGNED_32BIT(func))) { //| mov r0, EX->func dasm_put(Dst, 5636, Dt1(->func)); #line 9313 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| // if (CACHED_PTR(opline->result.num)) //| mov r2, EX->run_time_cache //| mov r0, aword [r2 + opline->result.num] dasm_put(Dst, 5641, Dt1(->run_time_cache), opline->result.num); #line 9318 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && func && (func->common.fn_flags & ZEND_ACC_IMMUTABLE) && opline->opcode != ZEND_INIT_FCALL) { /* Called func may be changed because of recompilation. See ext/opcache/tests/jit/init_fcall_003.phpt */ //| .if X64 if (!IS_SIGNED_32BIT(func)) { //| mov64 r1, ((ptrdiff_t)func) //| cmp r0, r1 dasm_put(Dst, 5650, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32)); } else { #line 9328 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp r0, func dasm_put(Dst, 3533, func); } #line 9330 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| .else //| cmp r0, func //| .endif //| jnz >1 //|.cold_code dasm_put(Dst, 285); #line 9335 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 9336 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| test r0, r0 //| jz >1 dasm_put(Dst, 5658); #line 9339 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.cold_code dasm_put(Dst, 289); #line 9341 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 9342 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode == ZEND_INIT_FCALL && func && func->type == ZEND_USER_FUNCTION && (func->op_array.fn_flags & ZEND_ACC_IMMUTABLE)) { //| LOAD_ADDR FCARG1a, func if (IS_SIGNED_32BIT(func)) { dasm_put(Dst, 759, ((ptrdiff_t)func)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32)); } #line 9347 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov aword [r2 + opline->result.num], FCARG1a //| EXT_CALL zend_jit_init_func_run_time_cache_helper, r0 dasm_put(Dst, 5666, opline->result.num); if (MAY_USE_32BIT_ADDR(zend_jit_init_func_run_time_cache_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_init_func_run_time_cache_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_init_func_run_time_cache_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_init_func_run_time_cache_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_init_func_run_time_cache_helper)), (unsigned int)((((ptrdiff_t)zend_jit_init_func_run_time_cache_helper))>>32)); } dasm_put(Dst, 59); } #line 9349 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >3 dasm_put(Dst, 3865); #line 9350 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { zval *zv = RT_CONSTANT(opline, opline->op2); if (opline->opcode == ZEND_INIT_FCALL) { //| LOAD_ADDR FCARG1a, Z_STR_P(zv); if (IS_SIGNED_32BIT(Z_STR_P(zv))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_STR_P(zv))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_STR_P(zv))), (unsigned int)((((ptrdiff_t)Z_STR_P(zv)))>>32)); } #line 9355 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| lea FCARG2a, aword [r2 + opline->result.num] //| EXT_CALL zend_jit_find_func_helper, r0 dasm_put(Dst, 5671, opline->result.num); if (MAY_USE_32BIT_ADDR(zend_jit_find_func_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_find_func_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_find_func_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_find_func_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_find_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_find_func_helper))>>32)); } dasm_put(Dst, 59); } #line 9357 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opline->opcode == ZEND_INIT_FCALL_BY_NAME) { //| LOAD_ADDR FCARG1a, Z_STR_P(zv + 1); if (IS_SIGNED_32BIT(Z_STR_P(zv + 1))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_STR_P(zv + 1))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_STR_P(zv + 1))), (unsigned int)((((ptrdiff_t)Z_STR_P(zv + 1)))>>32)); } #line 9359 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| lea FCARG2a, aword [r2 + opline->result.num] //| EXT_CALL zend_jit_find_func_helper, r0 dasm_put(Dst, 5671, opline->result.num); if (MAY_USE_32BIT_ADDR(zend_jit_find_func_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_find_func_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_find_func_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_find_func_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_find_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_find_func_helper))>>32)); } dasm_put(Dst, 59); } #line 9361 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME) { //| LOAD_ADDR FCARG1a, zv; if (IS_SIGNED_32BIT(zv)) { dasm_put(Dst, 759, ((ptrdiff_t)zv)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)zv)), (unsigned int)((((ptrdiff_t)zv))>>32)); } #line 9363 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| lea FCARG2a, aword [r2 + opline->result.num] //| EXT_CALL zend_jit_find_ns_func_helper, r0 dasm_put(Dst, 5671, opline->result.num); if (MAY_USE_32BIT_ADDR(zend_jit_find_ns_func_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_find_ns_func_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_find_ns_func_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_find_ns_func_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_find_ns_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_find_ns_func_helper))>>32)); } dasm_put(Dst, 59); } #line 9365 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, func && (func->common.fn_flags & ZEND_ACC_IMMUTABLE) ? ZEND_JIT_EXIT_INVALIDATE : 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } if (!func || opline->opcode == ZEND_INIT_FCALL) { //| test r0, r0 //| jnz >3 dasm_put(Dst, 5676); #line 9379 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (func->type == ZEND_USER_FUNCTION && !(func->common.fn_flags & ZEND_ACC_IMMUTABLE)) { const zend_op *opcodes = func->op_array.opcodes; //| .if X64 if (!IS_SIGNED_32BIT(opcodes)) { //| mov64 r1, ((ptrdiff_t)opcodes) //| cmp aword [r0 + offsetof(zend_op_array, opcodes)], r1 dasm_put(Dst, 5684, (unsigned int)(((ptrdiff_t)opcodes)), (unsigned int)((((ptrdiff_t)opcodes))>>32), offsetof(zend_op_array, opcodes)); } else { #line 9388 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp aword [r0 + offsetof(zend_op_array, opcodes)], opcodes dasm_put(Dst, 5693, offsetof(zend_op_array, opcodes), opcodes); } #line 9390 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| .else //| cmp aword [r0 + offsetof(zend_op_array, opcodes)], opcodes //| .endif //| jz >3 dasm_put(Dst, 3901); #line 9394 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| .if X64 if (!IS_SIGNED_32BIT(func)) { //| mov64 r1, ((ptrdiff_t)func) //| cmp r0, r1 dasm_put(Dst, 5650, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32)); } else { #line 9400 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp r0, func dasm_put(Dst, 3533, func); } #line 9402 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| .else //| cmp r0, func //| .endif //| jz >3 dasm_put(Dst, 3901); #line 9406 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 9408 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| test r0, r0 //| jnz >3 //| // SAVE_OPLINE(); //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 5676); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 9413 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->undefined_function dasm_put(Dst, 5699); #line 9414 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //|.code dasm_put(Dst, 386); #line 9417 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|3: dasm_put(Dst, 346); #line 9418 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!zend_jit_push_call_frame(Dst, opline, op_array, func, 0, 0, checked_stack)) { return 0; } if (zend_jit_needs_call_chain(call_info, b, op_array, ssa, ssa_op, opline, call_level, trace)) { if (!zend_jit_save_call_chain(Dst, call_level)) { return 0; } } else { delayed_call_chain = 1; delayed_call_level = call_level; } return 1; } static int zend_jit_init_method_call(dasm_State **Dst, const zend_op *opline, uint32_t b, const zend_op_array *op_array, zend_ssa *ssa, const zend_ssa_op *ssa_op, int call_level, uint32_t op1_info, zend_jit_addr op1_addr, zend_class_entry *ce, bool ce_is_instanceof, bool on_this, bool delayed_fetch_this, zend_class_entry *trace_ce, zend_jit_trace_rec *trace, int checked_stack, bool polymorphic_side_trace) { zend_func_info *info = ZEND_FUNC_INFO(op_array); zend_call_info *call_info = NULL; zend_function *func = NULL; zval *function_name; ZEND_ASSERT(opline->op2_type == IS_CONST); ZEND_ASSERT(op1_info & MAY_BE_OBJECT); function_name = RT_CONSTANT(opline, opline->op2); if (info) { call_info = info->callee_info; while (call_info && call_info->caller_init_opline != opline) { call_info = call_info->next_callee; } if (call_info && call_info->callee_func && !call_info->is_prototype) { func = call_info->callee_func; } } if (polymorphic_side_trace) { /* function is passed in r0 from parent_trace */ } else { if (on_this) { zend_jit_addr this_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, offsetof(zend_execute_data, This)); //| GET_ZVAL_PTR FCARG1a, this_addr ZEND_ASSERT(Z_MODE(this_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(this_addr)), Z_OFFSET(this_addr)); #line 9481 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (op1_info & MAY_BE_REF) { if (opline->op1_type == IS_CV) { if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 9486 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| ZVAL_DEREF FCARG1a, op1_info if (op1_info & MAY_BE_REF) { dasm_put(Dst, 5095, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 9488 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } else { /* Hack: Convert reference to regular value to simplify JIT code */ ZEND_ASSERT(Z_REG(op1_addr) == ZREG_FP); //| IF_NOT_ZVAL_TYPE op1_addr, IS_REFERENCE, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 9493 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| LOAD_ZVAL_ADDR FCARG1a, op1_addr dasm_put(Dst, 349, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 9494 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_unref_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_unref_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_unref_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_unref_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_unref_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_unref_helper)), (unsigned int)((((ptrdiff_t)zend_jit_unref_helper))>>32)); } dasm_put(Dst, 59); } #line 9495 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 9496 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op1_info & ((MAY_BE_UNDEF|MAY_BE_ANY)- MAY_BE_OBJECT)) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_NOT_ZVAL_TYPE op1_addr, IS_OBJECT, &exit_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT, (ptrdiff_t)(exit_addr)); #line 9507 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_OBJECT, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 9509 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 3265, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT); #line 9510 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 9511 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 9513 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 9515 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((opline->op1_type & (IS_VAR|IS_TMP_VAR)) && !delayed_fetch_this) { //| EXT_CALL zend_jit_invalid_method_call_tmp, r0 if (MAY_USE_32BIT_ADDR(zend_jit_invalid_method_call_tmp)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_invalid_method_call_tmp)); } else { if (IS_SIGNED_32BIT(zend_jit_invalid_method_call_tmp)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_invalid_method_call_tmp)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_invalid_method_call_tmp)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_method_call_tmp))>>32)); } dasm_put(Dst, 59); } #line 9517 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_invalid_method_call, r0 if (MAY_USE_32BIT_ADDR(zend_jit_invalid_method_call)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_invalid_method_call)); } else { if (IS_SIGNED_32BIT(zend_jit_invalid_method_call)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_invalid_method_call)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_invalid_method_call)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_method_call))>>32)); } dasm_put(Dst, 59); } #line 9519 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jmp ->exception_handler //|.code dasm_put(Dst, 5716); #line 9522 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| GET_ZVAL_PTR FCARG1a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 9525 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (delayed_call_chain) { if (!zend_jit_save_call_chain(Dst, delayed_call_level)) { return 0; } } //| mov aword T1, FCARG1a // save dasm_put(Dst, 3833); #line 9534 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (func) { //| // fbc = CACHED_PTR(opline->result.num + sizeof(void*)); //| mov r0, EX->run_time_cache //| mov r0, aword [r0 + opline->result.num + sizeof(void*)] //| test r0, r0 //| jz >1 dasm_put(Dst, 5722, Dt1(->run_time_cache), opline->result.num + sizeof(void*)); #line 9541 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| // if (CACHED_PTR(opline->result.num) == obj->ce)) { //| mov r0, EX->run_time_cache //| mov r2, aword [r0 + opline->result.num] //| cmp r2, [FCARG1a + offsetof(zend_object, ce)] //| jnz >1 //| // fbc = CACHED_PTR(opline->result.num + sizeof(void*)); //| mov r0, aword [r0 + opline->result.num + sizeof(void*)] dasm_put(Dst, 5738, Dt1(->run_time_cache), opline->result.num, offsetof(zend_object, ce), opline->result.num + sizeof(void*)); #line 9549 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.cold_code dasm_put(Dst, 289); #line 9552 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| LOAD_ADDR FCARG2a, function_name dasm_put(Dst, 63); if (IS_SIGNED_32BIT(function_name)) { dasm_put(Dst, 712, ((ptrdiff_t)function_name)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)function_name)), (unsigned int)((((ptrdiff_t)function_name))>>32)); } #line 9554 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| lea CARG3, aword T1 //|.else //| lea r0, aword T1 //| sub r4, 12 //| push r0 //|.endif //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 5759); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 9562 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((opline->op1_type & (IS_VAR|IS_TMP_VAR)) && !delayed_fetch_this) { //| EXT_CALL zend_jit_find_method_tmp_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_find_method_tmp_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_find_method_tmp_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_find_method_tmp_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_find_method_tmp_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_find_method_tmp_helper)), (unsigned int)((((ptrdiff_t)zend_jit_find_method_tmp_helper))>>32)); } dasm_put(Dst, 59); } #line 9564 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_find_method_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_find_method_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_find_method_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_find_method_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_find_method_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_find_method_helper)), (unsigned int)((((ptrdiff_t)zend_jit_find_method_helper))>>32)); } dasm_put(Dst, 59); } #line 9566 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if not(X64) //| add r4, 12 //|.endif //| test r0, r0 //| jnz >2 //| jmp ->exception_handler //|.code dasm_put(Dst, 5764); #line 9574 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 9575 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if ((!func || zend_jit_may_be_modified(func, op_array)) && trace && trace->op == ZEND_JIT_TRACE_INIT_CALL && trace->func #ifdef _WIN32 && trace->func->type != ZEND_INTERNAL_FUNCTION #endif ) { int32_t exit_point; const void *exit_addr; exit_point = zend_jit_trace_get_exit_point(opline, func ? ZEND_JIT_EXIT_INVALIDATE : ZEND_JIT_EXIT_METHOD_CALL); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } func = (zend_function*)trace->func; if (func->type == ZEND_USER_FUNCTION && (!(func->common.fn_flags & ZEND_ACC_IMMUTABLE) || (func->common.fn_flags & ZEND_ACC_CLOSURE) || !func->common.function_name)) { const zend_op *opcodes = func->op_array.opcodes; //| .if X64 if (!IS_SIGNED_32BIT(opcodes)) { //| mov64 r1, ((ptrdiff_t)opcodes) //| cmp aword [r0 + offsetof(zend_op_array, opcodes)], r1 dasm_put(Dst, 5684, (unsigned int)(((ptrdiff_t)opcodes)), (unsigned int)((((ptrdiff_t)opcodes))>>32), offsetof(zend_op_array, opcodes)); } else { #line 9607 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp aword [r0 + offsetof(zend_op_array, opcodes)], opcodes dasm_put(Dst, 5693, offsetof(zend_op_array, opcodes), opcodes); } #line 9609 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| .else //| cmp aword [r0 + offsetof(zend_op_array, opcodes)], opcodes //| .endif //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 9613 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| .if X64 if (!IS_SIGNED_32BIT(func)) { //| mov64 r1, ((ptrdiff_t)func) //| cmp r0, r1 dasm_put(Dst, 5650, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32)); } else { #line 9619 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp r0, func dasm_put(Dst, 3533, func); } #line 9621 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| .else //| cmp r0, func //| .endif //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 9625 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!func) { //| // if (fbc->common.fn_flags & ZEND_ACC_STATIC) { //| test dword [r0 + offsetof(zend_function, common.fn_flags)], ZEND_ACC_STATIC //| jnz >1 //|.cold_code dasm_put(Dst, 5777, offsetof(zend_function, common.fn_flags), ZEND_ACC_STATIC); #line 9633 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 9634 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!func || (func->common.fn_flags & ZEND_ACC_STATIC) != 0) { //| mov FCARG1a, aword T1 // restore //| mov FCARG2a, r0 //|.if X64 //| mov CARG3d, opline->extended_value //|.else //| sub r4, 12 //| push opline->extended_value //|.endif dasm_put(Dst, 5788, opline->extended_value); #line 9645 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((opline->op1_type & (IS_VAR|IS_TMP_VAR)) && !delayed_fetch_this) { //| EXT_CALL zend_jit_push_static_metod_call_frame_tmp, r0 if (MAY_USE_32BIT_ADDR(zend_jit_push_static_metod_call_frame_tmp)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_push_static_metod_call_frame_tmp)); } else { if (IS_SIGNED_32BIT(zend_jit_push_static_metod_call_frame_tmp)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_push_static_metod_call_frame_tmp)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_push_static_metod_call_frame_tmp)), (unsigned int)((((ptrdiff_t)zend_jit_push_static_metod_call_frame_tmp))>>32)); } dasm_put(Dst, 59); } #line 9647 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_push_static_metod_call_frame, r0 if (MAY_USE_32BIT_ADDR(zend_jit_push_static_metod_call_frame)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_push_static_metod_call_frame)); } else { if (IS_SIGNED_32BIT(zend_jit_push_static_metod_call_frame)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_push_static_metod_call_frame)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_push_static_metod_call_frame)), (unsigned int)((((ptrdiff_t)zend_jit_push_static_metod_call_frame))>>32)); } dasm_put(Dst, 59); } #line 9649 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if not(X64) //| add r4, 12 //|.endif if ((opline->op1_type & (IS_VAR|IS_TMP_VAR) && !delayed_fetch_this)) { //| test r0, r0 //| jz ->exception_handler dasm_put(Dst, 5798); #line 9656 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov RX, r0 dasm_put(Dst, 5806); #line 9658 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!func) { //| jmp >9 //|.code dasm_put(Dst, 4046); #line 9663 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!func || (func->common.fn_flags & ZEND_ACC_STATIC) == 0) { if (!zend_jit_push_call_frame(Dst, opline, NULL, func, 0, delayed_fetch_this, checked_stack)) { return 0; } } if (!func) { //|9: dasm_put(Dst, 4072); #line 9673 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } zend_jit_start_reuse_ip(); if (zend_jit_needs_call_chain(call_info, b, op_array, ssa, ssa_op, opline, call_level, trace)) { if (!zend_jit_save_call_chain(Dst, call_level)) { return 0; } } else { delayed_call_chain = 1; delayed_call_level = call_level; } return 1; } static int zend_jit_init_closure_call(dasm_State **Dst, const zend_op *opline, uint32_t b, const zend_op_array *op_array, zend_ssa *ssa, const zend_ssa_op *ssa_op, int call_level, zend_jit_trace_rec *trace, int checked_stack) { zend_function *func = NULL; zend_jit_addr op2_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var); //| GET_ZVAL_PTR r0, op2_addr ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5810, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); #line 9702 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (ssa->var_info[ssa_op->op2_use].ce != zend_ce_closure && !(ssa->var_info[ssa_op->op2_use].type & MAY_BE_CLASS_GUARD)) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //|.if X64 if (!IS_SIGNED_32BIT(zend_ce_closure)) { //| mov64 FCARG1a, ((ptrdiff_t)zend_ce_closure) //| cmp aword [r0 + offsetof(zend_object, ce)], FCARG1a dasm_put(Dst, 5818, (unsigned int)(((ptrdiff_t)zend_ce_closure)), (unsigned int)((((ptrdiff_t)zend_ce_closure))>>32), offsetof(zend_object, ce)); } else { #line 9717 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp aword [r0 + offsetof(zend_object, ce)], zend_ce_closure dasm_put(Dst, 5693, offsetof(zend_object, ce), zend_ce_closure); } #line 9719 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| cmp aword [r0 + offsetof(zend_object, ce)], zend_ce_closure //|.endif //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 9723 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (ssa->var_info && ssa_op->op2_use >= 0) { ssa->var_info[ssa_op->op2_use].type |= MAY_BE_CLASS_GUARD; ssa->var_info[ssa_op->op2_use].ce = zend_ce_closure; ssa->var_info[ssa_op->op2_use].is_instanceof = 0; } } if (trace && trace->op == ZEND_JIT_TRACE_INIT_CALL && trace->func && trace->func->type == ZEND_USER_FUNCTION) { const zend_op *opcodes; int32_t exit_point; const void *exit_addr; func = (zend_function*)trace->func; opcodes = func->op_array.opcodes; exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_CLOSURE_CALL); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| .if X64 if (!IS_SIGNED_32BIT(opcodes)) { //| mov64 FCARG1a, ((ptrdiff_t)opcodes) //| cmp aword [r0 + offsetof(zend_closure, func.op_array.opcodes)], FCARG1a dasm_put(Dst, 5818, (unsigned int)(((ptrdiff_t)opcodes)), (unsigned int)((((ptrdiff_t)opcodes))>>32), offsetof(zend_closure, func.op_array.opcodes)); } else { #line 9751 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp aword [r0 + offsetof(zend_closure, func.op_array.opcodes)], opcodes dasm_put(Dst, 5693, offsetof(zend_closure, func.op_array.opcodes), opcodes); } #line 9753 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| .else //| cmp aword [r0 + offsetof(zend_closure, func.op_array.opcodes)], opcodes //| .endif //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 9757 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (delayed_call_chain) { if (!zend_jit_save_call_chain(Dst, delayed_call_level)) { return 0; } } if (!zend_jit_push_call_frame(Dst, opline, NULL, func, 1, 0, checked_stack)) { return 0; } if (zend_jit_needs_call_chain(NULL, b, op_array, ssa, ssa_op, opline, call_level, trace)) { if (!zend_jit_save_call_chain(Dst, call_level)) { return 0; } } else { delayed_call_chain = 1; delayed_call_level = call_level; } if (trace && trace->op == ZEND_JIT_TRACE_END && trace->stop == ZEND_JIT_TRACE_STOP_INTERPRETER) { if (!zend_jit_set_valid_ip(Dst, opline + 1)) { return 0; } } return 1; } static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, zend_ssa *ssa, int call_level, unsigned int next_block, zend_jit_trace_rec *trace) { zend_func_info *info = ZEND_FUNC_INFO(op_array); zend_call_info *call_info = NULL; const zend_function *func = NULL; uint32_t i; zend_jit_addr res_addr; uint32_t call_num_args = 0; bool unknown_num_args = 0; const void *exit_addr = NULL; const zend_op *prev_opline; if (RETURN_VALUE_USED(opline)) { res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); } else { /* CPU stack allocated temporary zval */ res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R4, TMP_ZVAL_OFFSET); } prev_opline = opline - 1; while (prev_opline->opcode == ZEND_EXT_FCALL_BEGIN || prev_opline->opcode == ZEND_TICKS) { prev_opline--; } if (prev_opline->opcode == ZEND_SEND_UNPACK || prev_opline->opcode == ZEND_SEND_ARRAY || prev_opline->opcode == ZEND_CHECK_UNDEF_ARGS) { unknown_num_args = 1; } if (info) { call_info = info->callee_info; while (call_info && call_info->caller_call_opline != opline) { call_info = call_info->next_callee; } if (call_info && call_info->callee_func && !call_info->is_prototype) { func = call_info->callee_func; } if ((op_array->fn_flags & ZEND_ACC_TRAIT_CLONE) && JIT_G(current_frame) && JIT_G(current_frame)->call && !JIT_G(current_frame)->call->func) { call_info = NULL; func = NULL; /* megamorphic call from trait */ } } if (!func) { /* resolve function at run time */ } else if (func->type == ZEND_USER_FUNCTION) { ZEND_ASSERT(opline->opcode != ZEND_DO_ICALL); call_num_args = call_info->num_args; } else if (func->type == ZEND_INTERNAL_FUNCTION) { ZEND_ASSERT(opline->opcode != ZEND_DO_UCALL); call_num_args = call_info->num_args; } else { ZEND_UNREACHABLE(); } if (trace && !func) { if (trace->op == ZEND_JIT_TRACE_DO_ICALL) { ZEND_ASSERT(trace->func->type == ZEND_INTERNAL_FUNCTION); #ifndef ZEND_WIN32 // TODO: ASLR may cause different addresses in different workers ??? func = trace->func; if (JIT_G(current_frame) && JIT_G(current_frame)->call && TRACE_FRAME_NUM_ARGS(JIT_G(current_frame)->call) >= 0) { call_num_args = TRACE_FRAME_NUM_ARGS(JIT_G(current_frame)->call); } else { unknown_num_args = 1; } #endif } else if (trace->op == ZEND_JIT_TRACE_ENTER) { ZEND_ASSERT(trace->func->type == ZEND_USER_FUNCTION); if (zend_accel_in_shm(trace->func->op_array.opcodes)) { func = trace->func; if (JIT_G(current_frame) && JIT_G(current_frame)->call && TRACE_FRAME_NUM_ARGS(JIT_G(current_frame)->call) >= 0) { call_num_args = TRACE_FRAME_NUM_ARGS(JIT_G(current_frame)->call); } else { unknown_num_args = 1; } } } } bool may_have_extra_named_params = opline->extended_value == ZEND_FCALL_MAY_HAVE_EXTRA_NAMED_PARAMS && (!func || func->common.fn_flags & ZEND_ACC_VARIADIC); if (!reuse_ip) { zend_jit_start_reuse_ip(); //| // call = EX(call); //| mov RX, EX->call dasm_put(Dst, 0, Dt1(->call)); #line 9881 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } zend_jit_stop_reuse_ip(); //| // fbc = call->func; //| // mov r2, EX:RX->func ??? //| // SAVE_OPLINE(); //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 9888 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode == ZEND_DO_FCALL) { if (!func) { if (trace) { uint32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| mov r0, EX:RX->func //| test dword [r0 + offsetof(zend_op_array, fn_flags)], ZEND_ACC_DEPRECATED //| jnz &exit_addr dasm_put(Dst, 5827, Dt1(->func), offsetof(zend_op_array, fn_flags), ZEND_ACC_DEPRECATED, (ptrdiff_t)(exit_addr)); #line 9901 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } if (!delayed_call_chain) { if (call_level == 1) { //| mov aword EX->call, 0 dasm_put(Dst, 5840, Dt1(->call)); #line 9908 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| //EX(call) = call->prev_execute_data; //| mov r0, EX:RX->prev_execute_data //| mov EX->call, r0 dasm_put(Dst, 5849, Dt1(->prev_execute_data), Dt1(->call)); #line 9912 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } delayed_call_chain = 0; //| //call->prev_execute_data = execute_data; //| mov EX:RX->prev_execute_data, EX dasm_put(Dst, 5858, Dt1(->prev_execute_data)); #line 9918 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!func) { //| mov r0, EX:RX->func dasm_put(Dst, 5863, Dt1(->func)); #line 9921 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode == ZEND_DO_FCALL) { if (!func) { if (!trace) { //| test dword [r0 + offsetof(zend_op_array, fn_flags)], ZEND_ACC_DEPRECATED //| jnz >1 //|.cold_code dasm_put(Dst, 5777, offsetof(zend_op_array, fn_flags), ZEND_ACC_DEPRECATED); #line 9929 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 9930 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!GCC_GLOBAL_REGS) { //| mov FCARG1a, RX dasm_put(Dst, 520); #line 9932 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_jit_deprecated_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_deprecated_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_deprecated_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_deprecated_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_deprecated_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_deprecated_helper)), (unsigned int)((((ptrdiff_t)zend_jit_deprecated_helper))>>32)); } dasm_put(Dst, 59); } #line 9934 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test al, al //| mov r0, EX:RX->func // reload //| jne >1 //| jmp ->exception_handler //|.code dasm_put(Dst, 5868, Dt1(->func)); #line 9939 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 9940 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (func->common.fn_flags & ZEND_ACC_DEPRECATED) { if (!GCC_GLOBAL_REGS) { //| mov FCARG1a, RX dasm_put(Dst, 520); #line 9944 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_jit_deprecated_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_deprecated_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_deprecated_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_deprecated_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_deprecated_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_deprecated_helper)), (unsigned int)((((ptrdiff_t)zend_jit_deprecated_helper))>>32)); } dasm_put(Dst, 59); } #line 9946 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test al, al //| je ->exception_handler dasm_put(Dst, 5884); #line 9948 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!func && opline->opcode != ZEND_DO_UCALL && opline->opcode != ZEND_DO_ICALL) { //| cmp byte [r0 + offsetof(zend_function, type)], ZEND_USER_FUNCTION //| jne >8 dasm_put(Dst, 3596, offsetof(zend_function, type), ZEND_USER_FUNCTION); #line 9956 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if ((!func || func->type == ZEND_USER_FUNCTION) && opline->opcode != ZEND_DO_ICALL) { //| // EX(call) = NULL; //| mov aword EX:RX->call, 0 dasm_put(Dst, 1496, Dt1(->call)); #line 9962 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (RETURN_VALUE_USED(opline)) { //| // EX(return_value) = EX_VAR(opline->result.var); //| LOAD_ZVAL_ADDR r2, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 3303, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 3311, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 9966 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov aword EX:RX->return_value, r2 dasm_put(Dst, 5891, Dt1(->return_value)); #line 9967 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| // EX(return_value) = 0; //| mov aword EX:RX->return_value, 0 dasm_put(Dst, 1496, Dt1(->return_value)); #line 9970 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //EX_LOAD_RUN_TIME_CACHE(op_array); if (!func || func->op_array.cache_size) { if (func && op_array == &func->op_array) { /* recursive call */ if (trace || func->op_array.cache_size > sizeof(void*)) { //| mov r2, EX->run_time_cache //| mov EX:RX->run_time_cache, r2 dasm_put(Dst, 5896, Dt1(->run_time_cache), Dt1(->run_time_cache)); #line 9979 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (func && !(func->op_array.fn_flags & ZEND_ACC_CLOSURE) && ZEND_MAP_PTR_IS_OFFSET(func->op_array.run_time_cache)) { //| MEM_LOAD_ZTS r2, aword, compiler_globals, map_ptr_base, r1 if (IS_SIGNED_32BIT(&compiler_globals.map_ptr_base)) { dasm_put(Dst, 5421, &compiler_globals.map_ptr_base); } else { dasm_put(Dst, 5905, (unsigned int)(((ptrdiff_t)&compiler_globals.map_ptr_base)), (unsigned int)((((ptrdiff_t)&compiler_globals.map_ptr_base))>>32)); } #line 9985 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov r2, aword [r2 + (uintptr_t)ZEND_MAP_PTR(func->op_array.run_time_cache)] dasm_put(Dst, 5913, (uintptr_t)ZEND_MAP_PTR(func->op_array.run_time_cache)); #line 9986 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if ((func && (func->op_array.fn_flags & ZEND_ACC_CLOSURE)) || (JIT_G(current_frame) && JIT_G(current_frame)->call && TRACE_FRAME_IS_CLOSURE_CALL(JIT_G(current_frame)->call))) { /* Closures always use direct pointers */ //| mov r0, EX:RX->func //| mov r2, aword [r0 + offsetof(zend_op_array, run_time_cache__ptr)] dasm_put(Dst, 5918, Dt1(->func), offsetof(zend_op_array, run_time_cache__ptr)); #line 9993 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (func) { //| mov r0, EX:RX->func dasm_put(Dst, 5863, Dt1(->func)); #line 9996 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov r2, aword [r0 + offsetof(zend_op_array, run_time_cache__ptr)] //| test r2, 1 //| jz >1 //| MEM_LOAD_OP_ZTS add, r2, aword, compiler_globals, map_ptr_base, r1 dasm_put(Dst, 5927, offsetof(zend_op_array, run_time_cache__ptr)); if (IS_SIGNED_32BIT(&compiler_globals.map_ptr_base)) { dasm_put(Dst, 5944, &compiler_globals.map_ptr_base); } else { dasm_put(Dst, 5950, (unsigned int)(((ptrdiff_t)&compiler_globals.map_ptr_base)), (unsigned int)((((ptrdiff_t)&compiler_globals.map_ptr_base))>>32)); } #line 10001 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov r2, aword [r2] //|1: dasm_put(Dst, 5958); #line 10003 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov EX:RX->run_time_cache, r2 dasm_put(Dst, 5891, Dt1(->run_time_cache)); #line 10005 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| // EG(current_execute_data) = execute_data; //| MEM_STORE_ZTS aword, executor_globals, current_execute_data, RX, r1 if (IS_SIGNED_32BIT(&executor_globals.current_execute_data)) { dasm_put(Dst, 484, &executor_globals.current_execute_data); } else { dasm_put(Dst, 5964, (unsigned int)(((ptrdiff_t)&executor_globals.current_execute_data)), (unsigned int)((((ptrdiff_t)&executor_globals.current_execute_data))>>32)); } #line 10010 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FP, RX dasm_put(Dst, 5972); #line 10011 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // opline = op_array->opcodes; if (func && !unknown_num_args) { for (i = call_num_args; i < func->op_array.last_var; i++) { uint32_t n = EX_NUM_TO_VAR(i); //| SET_Z_TYPE_INFO RX + n, IS_UNDEF dasm_put(Dst, 5502, n+offsetof(zval,u1.type_info), IS_UNDEF); #line 10018 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (call_num_args <= func->op_array.num_args) { if (!trace || (trace->op == ZEND_JIT_TRACE_END && trace->stop == ZEND_JIT_TRACE_STOP_INTERPRETER)) { uint32_t num_args; if ((func->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0) { if (trace) { num_args = 0; } else if (call_info) { num_args = skip_valid_arguments(op_array, ssa, call_info); } else { num_args = call_num_args; } } else { num_args = call_num_args; } if (zend_accel_in_shm(func->op_array.opcodes)) { //| LOAD_IP_ADDR (func->op_array.opcodes + num_args) if (GCC_GLOBAL_REGS) { if (IS_SIGNED_32BIT((func->op_array.opcodes + num_args))) { dasm_put(Dst, 501, ((ptrdiff_t)(func->op_array.opcodes + num_args))); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)(func->op_array.opcodes + num_args))), (unsigned int)((((ptrdiff_t)(func->op_array.opcodes + num_args)))>>32)); } } else { if (IS_SIGNED_32BIT((func->op_array.opcodes + num_args))) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)(func->op_array.opcodes + num_args))); } else { dasm_put(Dst, 511, (unsigned int)(((ptrdiff_t)(func->op_array.opcodes + num_args))), (unsigned int)((((ptrdiff_t)(func->op_array.opcodes + num_args)))>>32), Dt1(->opline)); } } #line 10038 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov r0, EX->func dasm_put(Dst, 5636, Dt1(->func)); #line 10040 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (GCC_GLOBAL_REGS) { //| mov IP, aword [r0 + offsetof(zend_op_array, opcodes)] dasm_put(Dst, 5977, offsetof(zend_op_array, opcodes)); #line 10042 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (num_args) { //| add IP, (num_args * sizeof(zend_op)) dasm_put(Dst, 1514, (num_args * sizeof(zend_op))); #line 10044 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| mov FCARG1a, aword [r0 + offsetof(zend_op_array, opcodes)] dasm_put(Dst, 5982, offsetof(zend_op_array, opcodes)); #line 10047 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (num_args) { //| add FCARG1a, (num_args * sizeof(zend_op)) dasm_put(Dst, 5987, (num_args * sizeof(zend_op))); #line 10049 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov aword EX->opline, FCARG1a dasm_put(Dst, 5992, Dt1(->opline)); #line 10051 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (GCC_GLOBAL_REGS && !trace && op_array == &func->op_array && num_args >= op_array->required_num_args) { /* recursive call */ if (ZEND_OBSERVER_ENABLED) { //| SAVE_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } #line 10059 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1a, FP //| EXT_CALL zend_observer_fcall_begin, r0 dasm_put(Dst, 66); if (MAY_USE_32BIT_ADDR(zend_observer_fcall_begin)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_observer_fcall_begin)); } else { if (IS_SIGNED_32BIT(zend_observer_fcall_begin)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_observer_fcall_begin)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_observer_fcall_begin)), (unsigned int)((((ptrdiff_t)zend_observer_fcall_begin))>>32)); } dasm_put(Dst, 59); } #line 10061 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } #ifdef CONTEXT_THREADED_JIT //| call >1 //|.cold_code dasm_put(Dst, 5997); #line 10065 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| pop r0 //| jmp =>num_args //|.code dasm_put(Dst, 6002, num_args); #line 10069 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #else //| jmp =>num_args dasm_put(Dst, 1542, num_args); #line 10071 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #endif return 1; } } } else { if (!trace || (trace->op == ZEND_JIT_TRACE_END && trace->stop == ZEND_JIT_TRACE_STOP_INTERPRETER)) { if (func && zend_accel_in_shm(func->op_array.opcodes)) { //| LOAD_IP_ADDR (func->op_array.opcodes) if (GCC_GLOBAL_REGS) { if (IS_SIGNED_32BIT((func->op_array.opcodes))) { dasm_put(Dst, 501, ((ptrdiff_t)(func->op_array.opcodes))); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)(func->op_array.opcodes))), (unsigned int)((((ptrdiff_t)(func->op_array.opcodes)))>>32)); } } else { if (IS_SIGNED_32BIT((func->op_array.opcodes))) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)(func->op_array.opcodes))); } else { dasm_put(Dst, 511, (unsigned int)(((ptrdiff_t)(func->op_array.opcodes))), (unsigned int)((((ptrdiff_t)(func->op_array.opcodes)))>>32), Dt1(->opline)); } } #line 10080 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (GCC_GLOBAL_REGS) { //| mov IP, aword [r0 + offsetof(zend_op_array, opcodes)] dasm_put(Dst, 5977, offsetof(zend_op_array, opcodes)); #line 10082 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov FCARG1a, aword [r0 + offsetof(zend_op_array, opcodes)] //| mov aword EX->opline, FCARG1a dasm_put(Dst, 6010, offsetof(zend_op_array, opcodes), Dt1(->opline)); #line 10085 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!GCC_GLOBAL_REGS) { //| mov FCARG1a, FP dasm_put(Dst, 66); #line 10089 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_jit_copy_extra_args_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_copy_extra_args_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_copy_extra_args_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_copy_extra_args_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_copy_extra_args_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_copy_extra_args_helper)), (unsigned int)((((ptrdiff_t)zend_jit_copy_extra_args_helper))>>32)); } dasm_put(Dst, 59); } #line 10091 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| // opline = op_array->opcodes if (func && zend_accel_in_shm(func->op_array.opcodes)) { //| LOAD_IP_ADDR (func->op_array.opcodes) if (GCC_GLOBAL_REGS) { if (IS_SIGNED_32BIT((func->op_array.opcodes))) { dasm_put(Dst, 501, ((ptrdiff_t)(func->op_array.opcodes))); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)(func->op_array.opcodes))), (unsigned int)((((ptrdiff_t)(func->op_array.opcodes)))>>32)); } } else { if (IS_SIGNED_32BIT((func->op_array.opcodes))) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)(func->op_array.opcodes))); } else { dasm_put(Dst, 511, (unsigned int)(((ptrdiff_t)(func->op_array.opcodes))), (unsigned int)((((ptrdiff_t)(func->op_array.opcodes)))>>32), Dt1(->opline)); } } #line 10096 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (GCC_GLOBAL_REGS) { //| mov IP, aword [r0 + offsetof(zend_op_array, opcodes)] dasm_put(Dst, 5977, offsetof(zend_op_array, opcodes)); #line 10098 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov FCARG1a, aword [r0 + offsetof(zend_op_array, opcodes)] //| mov aword EX->opline, FCARG1a dasm_put(Dst, 6010, offsetof(zend_op_array, opcodes), Dt1(->opline)); #line 10101 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (func) { //| // num_args = EX_NUM_ARGS(); //| mov ecx, dword [FP + offsetof(zend_execute_data, This.u2.num_args)] //| // if (UNEXPECTED(num_args > first_extra_arg)) //| cmp ecx, (func->op_array.num_args) dasm_put(Dst, 6019, offsetof(zend_execute_data, This.u2.num_args), (func->op_array.num_args)); #line 10107 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| // first_extra_arg = op_array->num_args; //| mov edx, dword [r0 + offsetof(zend_op_array, num_args)] //| // num_args = EX_NUM_ARGS(); //| mov ecx, dword [FP + offsetof(zend_execute_data, This.u2.num_args)] //| // if (UNEXPECTED(num_args > first_extra_arg)) //| cmp ecx, edx dasm_put(Dst, 6028, offsetof(zend_op_array, num_args), offsetof(zend_execute_data, This.u2.num_args)); #line 10114 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jg >1 //|.cold_code dasm_put(Dst, 6038); #line 10117 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 10118 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!GCC_GLOBAL_REGS) { //| mov FCARG1a, FP dasm_put(Dst, 66); #line 10120 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_jit_copy_extra_args_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_copy_extra_args_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_copy_extra_args_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_copy_extra_args_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_copy_extra_args_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_copy_extra_args_helper)), (unsigned int)((((ptrdiff_t)zend_jit_copy_extra_args_helper))>>32)); } dasm_put(Dst, 59); } #line 10122 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!func) { //| mov r0, EX->func // reload dasm_put(Dst, 5636, Dt1(->func)); #line 10124 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov ecx, dword [FP + offsetof(zend_execute_data, This.u2.num_args)] // reload //| jmp >1 //|.code dasm_put(Dst, 6044, offsetof(zend_execute_data, This.u2.num_args)); #line 10128 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!func || (func->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) == 0) { if (!func) { //| // if (EXPECTED((op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) == 0)) //| test dword [r0 + offsetof(zend_op_array, fn_flags)], ZEND_ACC_HAS_TYPE_HINTS //| jnz >1 dasm_put(Dst, 6054, offsetof(zend_op_array, fn_flags), ZEND_ACC_HAS_TYPE_HINTS); #line 10133 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // opline += num_args; //|.if X64 ZEND_ASSERT(sizeof(zend_op) == 32); //| mov edx, ecx //| shl r2, 5 //|.else //| imul r2, ecx, sizeof(zend_op) //|.endif //| ADD_IP r2 dasm_put(Dst, 6064); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 6071); } else { dasm_put(Dst, 6075, Dt1(->opline)); } #line 10143 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|1: //| // if (EXPECTED((int)num_args < op_array->last_var)) { dasm_put(Dst, 63); #line 10146 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (func) { //| mov edx, (func->op_array.last_var) dasm_put(Dst, 5384, (func->op_array.last_var)); #line 10148 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov edx, dword [r0 + offsetof(zend_op_array, last_var)] dasm_put(Dst, 5923, offsetof(zend_op_array, last_var)); #line 10150 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| sub edx, ecx //| jle >3 //??? //| // zval *var = EX_VAR_NUM(num_args); dasm_put(Dst, 6080); #line 10154 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" // |.if X64 // | movsxd r1, ecx // |.endif //| shl r1, 4 //| lea r1, [FP + r1 + (ZEND_CALL_FRAME_SLOT * sizeof(zval))] //|2: //| SET_Z_TYPE_INFO r1, IS_UNDEF //| sub edx, 1 //| lea r1, [r1 + 16] //| jne <2 //|3: dasm_put(Dst, 6087, (ZEND_CALL_FRAME_SLOT * sizeof(zval)), offsetof(zval,u1.type_info), IS_UNDEF, 16); #line 10165 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (ZEND_OBSERVER_ENABLED) { //| SAVE_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } #line 10169 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1a, FP //| EXT_CALL zend_observer_fcall_begin, r0 dasm_put(Dst, 66); if (MAY_USE_32BIT_ADDR(zend_observer_fcall_begin)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_observer_fcall_begin)); } else { if (IS_SIGNED_32BIT(zend_observer_fcall_begin)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_observer_fcall_begin)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_observer_fcall_begin)), (unsigned int)((((ptrdiff_t)zend_observer_fcall_begin))>>32)); } dasm_put(Dst, 59); } #line 10171 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (trace) { if (!func && (opline->opcode != ZEND_DO_UCALL)) { //| jmp >9 dasm_put(Dst, 3591); #line 10176 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { #ifdef CONTEXT_THREADED_JIT //| call ->context_threaded_call dasm_put(Dst, 1791); #line 10180 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!func && (opline->opcode != ZEND_DO_UCALL)) { //| jmp >9 dasm_put(Dst, 3591); #line 10182 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| call ->context_threaded_call dasm_put(Dst, 1791); #line 10184 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!func) { //| jmp >9 dasm_put(Dst, 3591); #line 10186 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } #else if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { //| ADD_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 101); #endif #line 10190 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 10191 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (GCC_GLOBAL_REGS) { //| add r4, SPAD // stack alignment //| JMP_IP dasm_put(Dst, 119); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 10194 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov FP, aword T2 // restore FP //| mov RX, aword T3 // restore IP //| add r4, NR_SPAD // stack alignment //| mov r0, 1 // ZEND_VM_ENTER //| ret dasm_put(Dst, 124); #line 10200 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } #endif } if ((!func || func->type == ZEND_INTERNAL_FUNCTION) && (opline->opcode != ZEND_DO_UCALL)) { if (!func && (opline->opcode != ZEND_DO_ICALL)) { //|8: dasm_put(Dst, 4117); #line 10209 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode == ZEND_DO_FCALL_BY_NAME) { if (!func) { if (trace) { uint32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| test dword [r0 + offsetof(zend_op_array, fn_flags)], ZEND_ACC_DEPRECATED //| jnz &exit_addr dasm_put(Dst, 5831, offsetof(zend_op_array, fn_flags), ZEND_ACC_DEPRECATED, (ptrdiff_t)(exit_addr)); #line 10221 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| test dword [r0 + offsetof(zend_op_array, fn_flags)], ZEND_ACC_DEPRECATED //| jnz >1 //|.cold_code dasm_put(Dst, 5777, offsetof(zend_op_array, fn_flags), ZEND_ACC_DEPRECATED); #line 10225 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 10226 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!GCC_GLOBAL_REGS) { //| mov FCARG1a, RX dasm_put(Dst, 520); #line 10228 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_jit_deprecated_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_deprecated_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_deprecated_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_deprecated_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_deprecated_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_deprecated_helper)), (unsigned int)((((ptrdiff_t)zend_jit_deprecated_helper))>>32)); } dasm_put(Dst, 59); } #line 10230 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test al, al //| mov r0, EX:RX->func // reload //| jne >1 //| jmp ->exception_handler //|.code dasm_put(Dst, 5868, Dt1(->func)); #line 10235 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 10236 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (func->common.fn_flags & ZEND_ACC_DEPRECATED) { if (!GCC_GLOBAL_REGS) { //| mov FCARG1a, RX dasm_put(Dst, 520); #line 10240 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_jit_deprecated_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_deprecated_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_deprecated_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_deprecated_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_deprecated_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_deprecated_helper)), (unsigned int)((((ptrdiff_t)zend_jit_deprecated_helper))>>32)); } dasm_put(Dst, 59); } #line 10242 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test al, al //| je ->exception_handler //| mov r0, EX:RX->func // reload dasm_put(Dst, 6118, Dt1(->func)); #line 10245 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| // EG(current_execute_data) = execute_data; //| MEM_STORE_ZTS aword, executor_globals, current_execute_data, RX, r1 if (IS_SIGNED_32BIT(&executor_globals.current_execute_data)) { dasm_put(Dst, 484, &executor_globals.current_execute_data); } else { dasm_put(Dst, 5964, (unsigned int)(((ptrdiff_t)&executor_globals.current_execute_data)), (unsigned int)((((ptrdiff_t)&executor_globals.current_execute_data))>>32)); } #line 10250 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (ZEND_OBSERVER_ENABLED) { //| mov FCARG1a, RX //| EXT_CALL zend_observer_fcall_begin, r0 dasm_put(Dst, 520); if (MAY_USE_32BIT_ADDR(zend_observer_fcall_begin)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_observer_fcall_begin)); } else { if (IS_SIGNED_32BIT(zend_observer_fcall_begin)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_observer_fcall_begin)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_observer_fcall_begin)), (unsigned int)((((ptrdiff_t)zend_observer_fcall_begin))>>32)); } dasm_put(Dst, 59); } #line 10254 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov r0, EX:RX->func // reload dasm_put(Dst, 5863, Dt1(->func)); #line 10255 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // ZVAL_NULL(EX_VAR(opline->result.var)); //| LOAD_ZVAL_ADDR FCARG2a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2255, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2263, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 10259 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_Z_TYPE_INFO FCARG2a, IS_NULL dasm_put(Dst, 327, offsetof(zval,u1.type_info), IS_NULL); #line 10260 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" zend_jit_reset_last_valid_opline(); //| // (zend_execute_internal ? zend_execute_internal : fbc->internal_function.handler)(call, ret); if (zend_execute_internal) { //|.if X64 //| // CARG2 and FCARG2a are identical //| mov CARG1, RX //|.else //| mov aword A2, FCARG2a //| mov aword A1, RX //|.endif //| EXT_CALL zend_execute_internal, r0 dasm_put(Dst, 520); if (MAY_USE_32BIT_ADDR(zend_execute_internal)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_execute_internal)); } else { if (IS_SIGNED_32BIT(zend_execute_internal)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_execute_internal)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_execute_internal)), (unsigned int)((((ptrdiff_t)zend_execute_internal))>>32)); } dasm_put(Dst, 59); } #line 10273 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov FCARG1a, RX dasm_put(Dst, 520); #line 10275 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (func) { //| EXT_CALL func->internal_function.handler, r0 if (MAY_USE_32BIT_ADDR(func->internal_function.handler)) { dasm_put(Dst, 46, (ptrdiff_t)(func->internal_function.handler)); } else { if (IS_SIGNED_32BIT(func->internal_function.handler)) { dasm_put(Dst, 49, ((ptrdiff_t)func->internal_function.handler)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)func->internal_function.handler)), (unsigned int)((((ptrdiff_t)func->internal_function.handler))>>32)); } dasm_put(Dst, 59); } #line 10277 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| call aword [r0 + offsetof(zend_internal_function, handler)] dasm_put(Dst, 6129, offsetof(zend_internal_function, handler)); #line 10279 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (ZEND_OBSERVER_ENABLED) { //| LOAD_ZVAL_ADDR FCARG2a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2255, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2263, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 10284 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1a, RX //| EXT_CALL zend_observer_fcall_end, r0 dasm_put(Dst, 520); if (MAY_USE_32BIT_ADDR(zend_observer_fcall_end)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_observer_fcall_end)); } else { if (IS_SIGNED_32BIT(zend_observer_fcall_end)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_observer_fcall_end)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_observer_fcall_end)), (unsigned int)((((ptrdiff_t)zend_observer_fcall_end))>>32)); } dasm_put(Dst, 59); } #line 10286 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // EG(current_execute_data) = execute_data; //| MEM_STORE_ZTS aword, executor_globals, current_execute_data, FP, r0 if (IS_SIGNED_32BIT(&executor_globals.current_execute_data)) { dasm_put(Dst, 6134, &executor_globals.current_execute_data); } else { dasm_put(Dst, 6140, (unsigned int)(((ptrdiff_t)&executor_globals.current_execute_data)), (unsigned int)((((ptrdiff_t)&executor_globals.current_execute_data))>>32)); } #line 10290 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // zend_vm_stack_free_args(call); if (func && !unknown_num_args) { for (i = 0; i < call_num_args; i++ ) { if (zend_jit_needs_arg_dtor(func, i, call_info)) { uint32_t offset = EX_NUM_TO_VAR(i); //| ZVAL_PTR_DTOR ZEND_ADDR_MEM_ZVAL(ZREG_RX, offset), MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN, 0, 1, opline if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_RX, offset)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_RX, offset))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_RX, offset))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_RX, offset)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_RX, offset))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_RX, offset))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_RX, offset)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_RX, offset))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_RX, offset))); if (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & MAY_BE_GUARD) || RC_MAY_BE_1(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN)) { if (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & MAY_BE_GUARD) || RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN)) { if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & MAY_BE_GUARD) && has_concrete_type((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_RX, offset)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_RX, offset))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_RX, offset))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } #line 10297 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else { //| mov FCARG1a, RX //| EXT_CALL zend_jit_vm_stack_free_args_helper, r0 dasm_put(Dst, 520); if (MAY_USE_32BIT_ADDR(zend_jit_vm_stack_free_args_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_vm_stack_free_args_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_vm_stack_free_args_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_vm_stack_free_args_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_vm_stack_free_args_helper)), (unsigned int)((((ptrdiff_t)zend_jit_vm_stack_free_args_helper))>>32)); } dasm_put(Dst, 59); } #line 10302 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (may_have_extra_named_params) { //| test byte [RX + offsetof(zend_execute_data, This.u1.type_info) + 3], (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS >> 24) //| jnz >1 //|.cold_code dasm_put(Dst, 6148, offsetof(zend_execute_data, This.u1.type_info) + 3, (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS >> 24)); #line 10307 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| mov FCARG1a, aword [RX + offsetof(zend_execute_data, extra_named_params)] //| EXT_CALL zend_free_extra_named_params, r0 dasm_put(Dst, 6160, offsetof(zend_execute_data, extra_named_params)); if (MAY_USE_32BIT_ADDR(zend_free_extra_named_params)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_free_extra_named_params)); } else { if (IS_SIGNED_32BIT(zend_free_extra_named_params)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_free_extra_named_params)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_free_extra_named_params)), (unsigned int)((((ptrdiff_t)zend_free_extra_named_params))>>32)); } dasm_put(Dst, 59); } #line 10310 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >2 //|.code dasm_put(Dst, 2817); #line 10312 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 10313 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|8: dasm_put(Dst, 4117); #line 10316 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode == ZEND_DO_FCALL) { // TODO: optimize ??? //| // if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) //| test byte [RX + offsetof(zend_execute_data, This.u1.type_info) + 2], (ZEND_CALL_RELEASE_THIS >> 16) //| jnz >1 //|.cold_code dasm_put(Dst, 6148, offsetof(zend_execute_data, This.u1.type_info) + 2, (ZEND_CALL_RELEASE_THIS >> 16)); #line 10322 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| GET_Z_PTR FCARG1a, RX + offsetof(zend_execute_data, This) //| // OBJ_RELEASE(object); //| OBJ_RELEASE ZREG_FCARG1, >2 dasm_put(Dst, 6167, offsetof(zend_execute_data, This), (ZREG_FCARG1), 0); if (ZREG_FCARG1 != ZREG_FCARG1) { dasm_put(Dst, 2228, (ZREG_FCARG1)); } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } dasm_put(Dst, 6186, (ZREG_FCARG1), (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (ZREG_FCARG1 != ZREG_FCARG1) { dasm_put(Dst, 2228, (ZREG_FCARG1)); } if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } #line 10326 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >2 //|.code dasm_put(Dst, 6205); #line 10328 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 10329 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || !JIT_G(current_frame) || !JIT_G(current_frame)->call || !TRACE_FRAME_IS_NESTED(JIT_G(current_frame)->call) || prev_opline->opcode == ZEND_SEND_UNPACK || prev_opline->opcode == ZEND_SEND_ARRAY || prev_opline->opcode == ZEND_CHECK_UNDEF_ARGS) { //| // zend_vm_stack_free_call_frame(call); //| test byte [RX + offsetof(zend_execute_data, This.u1.type_info) + 2], (ZEND_CALL_ALLOCATED >> 16) //| jnz >1 //|.cold_code dasm_put(Dst, 6148, offsetof(zend_execute_data, This.u1.type_info) + 2, (ZEND_CALL_ALLOCATED >> 16)); #line 10343 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| mov FCARG1a, RX //| EXT_CALL zend_jit_free_call_frame, r0 dasm_put(Dst, 6213); if (MAY_USE_32BIT_ADDR(zend_jit_free_call_frame)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_free_call_frame)); } else { if (IS_SIGNED_32BIT(zend_jit_free_call_frame)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_free_call_frame)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_free_call_frame)), (unsigned int)((((ptrdiff_t)zend_jit_free_call_frame))>>32)); } dasm_put(Dst, 59); } #line 10346 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >1 //|.code dasm_put(Dst, 3691); #line 10348 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| MEM_STORE_ZTS aword, executor_globals, vm_stack_top, RX, r0 if (IS_SIGNED_32BIT(&executor_globals.vm_stack_top)) { dasm_put(Dst, 484, &executor_globals.vm_stack_top); } else { dasm_put(Dst, 490, (unsigned int)(((ptrdiff_t)&executor_globals.vm_stack_top)), (unsigned int)((((ptrdiff_t)&executor_globals.vm_stack_top))>>32)); } #line 10350 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 10351 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!RETURN_VALUE_USED(opline)) { zend_class_entry *ce; bool ce_is_instanceof; uint32_t func_info = call_info ? zend_get_func_info(call_info, ssa, &ce, &ce_is_instanceof) : (MAY_BE_ANY|MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN); /* If an exception is thrown, the return_value may stay at the * original value of null. */ func_info |= MAY_BE_NULL; if (func_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) { //| ZVAL_PTR_DTOR res_addr, func_info, 1, 1, opline if ((func_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((func_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(res_addr)), Z_OFFSET(res_addr)); if (((func_info) & MAY_BE_GUARD) || RC_MAY_BE_1(func_info)) { if (((func_info) & MAY_BE_GUARD) || RC_MAY_BE_N(func_info)) { if (1 && (((func_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(func_info) && ((func_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((func_info) & MAY_BE_GUARD) && has_concrete_type((func_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((func_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((func_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((func_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (1 && (((func_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(func_info) && ((func_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (1 && (((func_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(func_info) && ((func_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((func_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((func_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } #line 10365 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| // if (UNEXPECTED(EG(exception) != NULL)) { //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.exception)) { dasm_put(Dst, 71, &executor_globals.exception); } else { dasm_put(Dst, 78, (unsigned int)(((ptrdiff_t)&executor_globals.exception)), (unsigned int)((((ptrdiff_t)&executor_globals.exception))>>32)); } #line 10370 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne ->icall_throw_handler dasm_put(Dst, 6220); #line 10371 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" // TODO: Can we avoid checking for interrupts after each call ??? if (trace && last_valid_opline != opline) { int32_t exit_point = zend_jit_trace_get_exit_point(opline + 1, ZEND_JIT_EXIT_TO_VM); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } } else { exit_addr = NULL; } if (!zend_jit_check_timeout(Dst, opline + 1, exit_addr)) { return 0; } if ((!trace || !func) && opline->opcode != ZEND_DO_ICALL) { //| LOAD_IP_ADDR (opline + 1) if (GCC_GLOBAL_REGS) { if (IS_SIGNED_32BIT((opline + 1))) { dasm_put(Dst, 501, ((ptrdiff_t)(opline + 1))); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32)); } } else { if (IS_SIGNED_32BIT((opline + 1))) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)(opline + 1))); } else { dasm_put(Dst, 511, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32), Dt1(->opline)); } } #line 10389 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (trace && trace->op == ZEND_JIT_TRACE_END && trace->stop == ZEND_JIT_TRACE_STOP_INTERPRETER) { //| LOAD_IP_ADDR (opline + 1) if (GCC_GLOBAL_REGS) { if (IS_SIGNED_32BIT((opline + 1))) { dasm_put(Dst, 501, ((ptrdiff_t)(opline + 1))); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32)); } } else { if (IS_SIGNED_32BIT((opline + 1))) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)(opline + 1))); } else { dasm_put(Dst, 511, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32), Dt1(->opline)); } } #line 10393 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!func) { //|9: dasm_put(Dst, 4072); #line 10398 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_send_val(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr) { uint32_t arg_num = opline->op2.num; zend_jit_addr arg_addr; ZEND_ASSERT(opline->opcode == ZEND_SEND_VAL || arg_num <= MAX_ARG_FLAG_NUM); if (!zend_jit_reuse_ip(Dst)) { return 0; } if (opline->opcode == ZEND_SEND_VAL_EX) { uint32_t mask = ZEND_SEND_BY_REF << ((arg_num + 3) * 2); ZEND_ASSERT(arg_num <= MAX_ARG_FLAG_NUM); if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && JIT_G(current_frame) && JIT_G(current_frame)->call && JIT_G(current_frame)->call->func) { if (ARG_MUST_BE_SENT_BY_REF(JIT_G(current_frame)->call->func, arg_num)) { /* Don't generate code that always throws exception */ return 0; } } else if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| mov r0, EX:RX->func //| test dword [r0 + offsetof(zend_function, quick_arg_flags)], mask //| jnz &exit_addr dasm_put(Dst, 5827, Dt1(->func), offsetof(zend_function, quick_arg_flags), mask, (ptrdiff_t)(exit_addr)); #line 10436 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov r0, EX:RX->func //| test dword [r0 + offsetof(zend_function, quick_arg_flags)], mask //| jnz >1 //|.cold_code dasm_put(Dst, 6225, Dt1(->func), offsetof(zend_function, quick_arg_flags), mask); #line 10441 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 10442 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(op1_addr) == IS_REG) { /* set type to avoid zval_ptr_dtor() on uninitialized value */ zend_jit_addr addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var); //| SET_ZVAL_TYPE_INFO addr, IS_UNDEF ZEND_ASSERT(Z_MODE(addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(addr)), Z_OFFSET(addr)+offsetof(zval,u1.type_info), IS_UNDEF); #line 10446 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 10448 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->throw_cannot_pass_by_ref //|.code dasm_put(Dst, 6240); #line 10450 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } arg_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, opline->result.var); if (opline->op1_type == IS_CONST) { zval *zv = RT_CONSTANT(opline, opline->op1); //| ZVAL_COPY_CONST arg_addr, MAY_BE_ANY, MAY_BE_ANY, zv, ZREG_R0 if (Z_TYPE_P(zv) > IS_TRUE) { if (Z_TYPE_P(zv) == IS_DOUBLE) { zend_reg dst_reg = (Z_MODE(arg_addr) == IS_REG) ? Z_REG(arg_addr) : ZREG_XMM0; if (Z_DVAL_P(zv) == 0.0 && !is_signed(Z_DVAL_P(zv))) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } else if (!IS_SIGNED_32BIT(zv)) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(((uintptr_t)zv)), (unsigned int)((((uintptr_t)zv))>>32)); if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); } else { dasm_put(Dst, 1907, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); } } else { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); } else { dasm_put(Dst, 1867, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); } } if (Z_MODE(arg_addr) == IS_REG) { if (dst_reg != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (dst_reg-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (dst_reg-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_TYPE_P(zv) == IS_LONG && MAY_BE_ANY == MAY_BE_DOUBLE) { zend_reg dst_reg = (Z_MODE(arg_addr) == IS_REG) ? Z_REG(arg_addr) : ZREG_XMM0; if (Z_LVAL_P(zv) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(zv)); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (ZREG_R0)); } else { dasm_put(Dst, 2659, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (ZREG_R0)); } } if (Z_MODE(arg_addr) == IS_REG) { if (dst_reg != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (dst_reg-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (dst_reg-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_LVAL_P(zv) == 0 && Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1650, (Z_REG(arg_addr)), (Z_REG(arg_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1658, (Z_REG(arg_addr)), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); } else { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R0), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else { if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1665, (Z_REG(arg_addr)), Z_LVAL_P(zv)); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3768, (Z_REG(arg_addr)), Z_OFFSET(arg_addr), Z_LVAL_P(zv)); } } } } if (Z_MODE(arg_addr) == IS_MEM_ZVAL) { if (MAY_BE_ANY == MAY_BE_DOUBLE) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != MAY_BE_DOUBLE) { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); } } else if (((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (1<<Z_TYPE_P(zv))) || (MAY_BE_ANY & (MAY_BE_STRING|MAY_BE_ARRAY)) != 0) { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), Z_TYPE_INFO_P(zv)); } } #line 10460 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REFCOUNTED_P(zv)) { //| ADDREF_CONST zv, r0 if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 6246, (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); } else { dasm_put(Dst, 3792, Z_LVAL_P(zv)); } #line 10462 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| ZVAL_COPY_VALUE arg_addr, MAY_BE_ANY, op1_addr, op1_info, ZREG_R0, ZREG_R2 if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(arg_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(op1_addr)) { if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_addr)), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(arg_addr)), (Z_REG(arg_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (Z_REG(arg_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(arg_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_REG(arg_addr) != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(arg_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R2 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(arg_addr) == IS_REG) { if (Z_REG(op1_addr) != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(op1_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(arg_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(arg_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(arg_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(arg_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); } #line 10465 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_check_undef_args(dasm_State **Dst, const zend_op *opline) { //| mov FCARG1a, EX->call //| test byte [FCARG1a + offsetof(zend_execute_data, This.u1.type_info) + 3], (ZEND_CALL_MAY_HAVE_UNDEF >> 24) //| jnz >1 //|.cold_code dasm_put(Dst, 6254, Dt1(->call), offsetof(zend_execute_data, This.u1.type_info) + 3, (ZEND_CALL_MAY_HAVE_UNDEF >> 24)); #line 10476 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 63); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 10478 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_handle_undef_args, r0 if (MAY_USE_32BIT_ADDR(zend_handle_undef_args)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_handle_undef_args)); } else { if (IS_SIGNED_32BIT(zend_handle_undef_args)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_handle_undef_args)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_handle_undef_args)), (unsigned int)((((ptrdiff_t)zend_handle_undef_args))>>32)); } dasm_put(Dst, 59); } #line 10479 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test r0, r0 //| jnz ->exception_handler //| jmp >2 //|.code dasm_put(Dst, 6269); #line 10483 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 10484 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_send_ref(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, int cold) { zend_jit_addr op1_addr, arg_addr, ref_addr; op1_addr = OP1_ADDR(); arg_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, opline->result.var); if (!zend_jit_reuse_ip(Dst)) { return 0; } if (opline->op1_type == IS_VAR) { if (op1_info & MAY_BE_INDIRECT) { //| LOAD_ZVAL_ADDR r0, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 6282, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 6290, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 10502 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // if (EXPECTED(Z_TYPE_P(ret) == IS_INDIRECT)) { //| IF_NOT_Z_TYPE r0, IS_INDIRECT, >1 //| // ret = Z_INDIRECT_P(ret); //| GET_Z_PTR r0, r0 //|1: dasm_put(Dst, 6296, offsetof(zval, u1.v.type), IS_INDIRECT); #line 10507 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0); } } else if (opline->op1_type == IS_CV) { if (op1_info & MAY_BE_UNDEF) { if (op1_info & (MAY_BE_ANY|MAY_BE_REF)) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_UNDEF, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 10513 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO op1_addr, IS_NULL dasm_put(Dst, 349, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 10514 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >2 //|1: dasm_put(Dst, 6310, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_NULL); #line 10516 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } op1_info &= ~MAY_BE_UNDEF; op1_info |= MAY_BE_NULL; } } else { ZEND_UNREACHABLE(); } if (op1_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) { if (op1_info & MAY_BE_REF) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_REFERENCE, >2 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 10527 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_PTR r1, op1_addr dasm_put(Dst, 2131, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 10528 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_ADDREF r1 //| SET_ZVAL_PTR arg_addr, r1 dasm_put(Dst, 6325, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); #line 10530 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO arg_addr, IS_REFERENCE_EX dasm_put(Dst, 6336, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); #line 10531 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >6 dasm_put(Dst, 6344, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), IS_REFERENCE_EX); #line 10532 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|2: //| // ZVAL_NEW_REF(arg, varptr); dasm_put(Dst, 1944); #line 10535 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op1_type == IS_VAR) { if (Z_REG(op1_addr) != ZREG_R0 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR r0, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 6282, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 6290, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 10538 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov aword T1, r0 // save dasm_put(Dst, 3421); #line 10540 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EMALLOC sizeof(zend_reference), op_array, opline #if ZEND_DEBUG const char *filename = op_array->filename ? op_array->filename->val : NULL; dasm_put(Dst, 759, sizeof(zend_reference)); if (IS_SIGNED_32BIT(filename)) { dasm_put(Dst, 712, ((ptrdiff_t)filename)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)filename)), (unsigned int)((((ptrdiff_t)filename))>>32)); } dasm_put(Dst, 6357, opline->lineno); if (MAY_USE_32BIT_ADDR(_emalloc)) { dasm_put(Dst, 46, (ptrdiff_t)(_emalloc)); } else { if (IS_SIGNED_32BIT(_emalloc)) { dasm_put(Dst, 49, ((ptrdiff_t)_emalloc)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_emalloc)), (unsigned int)((((ptrdiff_t)_emalloc))>>32)); } dasm_put(Dst, 59); } #else #ifdef HAVE_BUILTIN_CONSTANT_P if (sizeof(zend_reference) > 24 && sizeof(zend_reference) <= 32) { if (MAY_USE_32BIT_ADDR(_emalloc_32)) { dasm_put(Dst, 46, (ptrdiff_t)(_emalloc_32)); } else { if (IS_SIGNED_32BIT(_emalloc_32)) { dasm_put(Dst, 49, ((ptrdiff_t)_emalloc_32)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_emalloc_32)), (unsigned int)((((ptrdiff_t)_emalloc_32))>>32)); } dasm_put(Dst, 59); } } else { dasm_put(Dst, 759, sizeof(zend_reference)); if (MAY_USE_32BIT_ADDR(_emalloc)) { dasm_put(Dst, 46, (ptrdiff_t)(_emalloc)); } else { if (IS_SIGNED_32BIT(_emalloc)) { dasm_put(Dst, 49, ((ptrdiff_t)_emalloc)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_emalloc)), (unsigned int)((((ptrdiff_t)_emalloc))>>32)); } dasm_put(Dst, 59); } } #else dasm_put(Dst, 759, sizeof(zend_reference)); if (MAY_USE_32BIT_ADDR(_emalloc)) { dasm_put(Dst, 46, (ptrdiff_t)(_emalloc)); } else { if (IS_SIGNED_32BIT(_emalloc)) { dasm_put(Dst, 49, ((ptrdiff_t)_emalloc)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_emalloc)), (unsigned int)((((ptrdiff_t)_emalloc))>>32)); } dasm_put(Dst, 59); } #endif #endif #line 10542 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov dword [r0], 2 //| mov dword [r0 + offsetof(zend_reference, gc.u.type_info)], GC_REFERENCE //| mov aword [r0 + offsetof(zend_reference, sources.ptr)], 0 dasm_put(Dst, 6366, offsetof(zend_reference, gc.u.type_info), GC_REFERENCE, offsetof(zend_reference, sources.ptr)); #line 10545 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, offsetof(zend_reference, val)); if (opline->op1_type == IS_VAR) { zend_jit_addr val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R1, 0); //| mov r1, aword T1 // restore //| ZVAL_COPY_VALUE ref_addr, MAY_BE_ANY, val_addr, op1_info, ZREG_R2, ZREG_R2 dasm_put(Dst, 6385); if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(ref_addr) != IS_REG || Z_REG(ref_addr) != Z_REG(val_addr)) { if (Z_MODE(ref_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(ref_addr))); } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(val_addr)), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } } else if (Z_MODE(ref_addr) == IS_REG) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(ref_addr)), (Z_REG(ref_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (Z_REG(ref_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(ref_addr)), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(ref_addr)), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (Z_REG(ref_addr) != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(ref_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (ZREG_R2 != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(ref_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(ref_addr))); } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(ref_addr) == IS_REG) { if (Z_REG(val_addr) != Z_REG(ref_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { dasm_put(Dst, 1844, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } } else if (Z_MODE(ref_addr) == IS_REG) { if (Z_MODE(val_addr) != IS_REG || Z_REG(ref_addr) != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(ref_addr)-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (Z_REG(ref_addr)-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(ref_addr)-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(val_addr) != IS_REG || ZREG_XMM0 != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(ref_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(ref_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ref_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ref_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval,u1.type_info)); } #line 10551 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_PTR val_addr, r0 ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); #line 10552 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO val_addr, IS_REFERENCE_EX dasm_put(Dst, 2191, (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info), IS_REFERENCE_EX); #line 10553 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| ZVAL_COPY_VALUE ref_addr, MAY_BE_ANY, op1_addr, op1_info, ZREG_R1, ZREG_R2 if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(ref_addr) != IS_REG || Z_REG(ref_addr) != Z_REG(op1_addr)) { if (Z_MODE(ref_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(ref_addr))); } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_addr)), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } } else if (Z_MODE(ref_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(ref_addr)), (Z_REG(ref_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (Z_REG(ref_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(ref_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(ref_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_REG(ref_addr) != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(ref_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R2 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(ref_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(ref_addr))); } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(ref_addr) == IS_REG) { if (Z_REG(op1_addr) != Z_REG(ref_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } } else if (Z_MODE(ref_addr) == IS_REG) { if (Z_MODE(op1_addr) != IS_REG || Z_REG(ref_addr) != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(ref_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (Z_REG(ref_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(ref_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(ref_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(ref_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ref_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ref_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R1), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval,u1.type_info)); } #line 10555 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_PTR op1_addr, r0 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 10556 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO op1_addr, IS_REFERENCE_EX dasm_put(Dst, 2191, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_REFERENCE_EX); #line 10557 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_ZVAL_PTR arg_addr, r0 ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); #line 10559 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO arg_addr, IS_REFERENCE_EX dasm_put(Dst, 2191, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), IS_REFERENCE_EX); #line 10560 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|6: //| FREE_OP opline->op1_type, opline->op1, op1_info, !cold, opline dasm_put(Dst, 3290); if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (!cold) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (!cold && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 10564 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|7: dasm_put(Dst, 4315); #line 10565 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_send_var(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_jit_addr op1_addr, zend_jit_addr op1_def_addr) { uint32_t arg_num = opline->op2.num; zend_jit_addr arg_addr; ZEND_ASSERT((opline->opcode != ZEND_SEND_VAR_EX && opline->opcode != ZEND_SEND_VAR_NO_REF_EX) || arg_num <= MAX_ARG_FLAG_NUM); arg_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, opline->result.var); if (!zend_jit_reuse_ip(Dst)) { return 0; } if (opline->opcode == ZEND_SEND_VAR_EX) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && JIT_G(current_frame) && JIT_G(current_frame)->call && JIT_G(current_frame)->call->func) { if (ARG_SHOULD_BE_SENT_BY_REF(JIT_G(current_frame)->call->func, arg_num)) { if (!zend_jit_send_ref(Dst, opline, op_array, op1_info, 0)) { return 0; } return 1; } } else { uint32_t mask = (ZEND_SEND_BY_REF|ZEND_SEND_PREFER_REF) << ((arg_num + 3) * 2); //| mov r0, EX:RX->func //| test dword [r0 + offsetof(zend_function, quick_arg_flags)], mask //| jnz >1 //|.cold_code dasm_put(Dst, 6225, Dt1(->func), offsetof(zend_function, quick_arg_flags), mask); #line 10602 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 10603 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_send_ref(Dst, opline, op_array, op1_info, 1)) { return 0; } //| jmp >7 //|.code dasm_put(Dst, 6390); #line 10608 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (opline->opcode == ZEND_SEND_VAR_NO_REF_EX) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && JIT_G(current_frame) && JIT_G(current_frame)->call && JIT_G(current_frame)->call->func) { if (ARG_SHOULD_BE_SENT_BY_REF(JIT_G(current_frame)->call->func, arg_num)) { //| ZVAL_COPY_VALUE arg_addr, MAY_BE_ANY, op1_addr, op1_info, ZREG_R1, ZREG_R2 if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(arg_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(op1_addr)) { if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_addr)), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(arg_addr)), (Z_REG(arg_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (Z_REG(arg_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(arg_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_REG(arg_addr) != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(arg_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R2 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(arg_addr) == IS_REG) { if (Z_REG(op1_addr) != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(op1_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(arg_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(arg_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(arg_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(arg_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R1), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); } #line 10617 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!ARG_MAY_BE_SENT_BY_REF(JIT_G(current_frame)->call->func, arg_num)) { if (!(op1_info & MAY_BE_REF)) { /* Don't generate code that always throws exception */ return 0; } else { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| cmp cl, IS_REFERENCE //| jne &exit_addr dasm_put(Dst, 6396, IS_REFERENCE, (ptrdiff_t)(exit_addr)); #line 10630 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } return 1; } } else { uint32_t mask = (ZEND_SEND_BY_REF|ZEND_SEND_PREFER_REF) << ((arg_num + 3) * 2); //| mov r0, EX:RX->func //| test dword [r0 + offsetof(zend_function, quick_arg_flags)], mask //| jnz >1 //|.cold_code dasm_put(Dst, 6225, Dt1(->func), offsetof(zend_function, quick_arg_flags), mask); #line 10641 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 10642 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" mask = ZEND_SEND_PREFER_REF << ((arg_num + 3) * 2); //| ZVAL_COPY_VALUE arg_addr, MAY_BE_ANY, op1_addr, op1_info, ZREG_R1, ZREG_R2 if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(arg_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(op1_addr)) { if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_addr)), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(arg_addr)), (Z_REG(arg_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (Z_REG(arg_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(arg_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_REG(arg_addr) != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(arg_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R2 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(arg_addr) == IS_REG) { if (Z_REG(op1_addr) != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(op1_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(arg_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(arg_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(arg_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(arg_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R1), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); } #line 10646 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_REF) { //| cmp cl, IS_REFERENCE //| je >7 dasm_put(Dst, 6404, IS_REFERENCE); #line 10649 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| test dword [r0 + offsetof(zend_function, quick_arg_flags)], mask //| jnz >7 dasm_put(Dst, 6413, offsetof(zend_function, quick_arg_flags), mask); #line 10652 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 10659 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 10661 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| LOAD_ZVAL_ADDR FCARG1a, arg_addr if (Z_MODE(arg_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(arg_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(arg_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(arg_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(arg_addr)))>>32)); } } else if (Z_MODE(arg_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(arg_addr)) { dasm_put(Dst, 2220, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 2228, (Z_REG(arg_addr))); } } else { ZEND_UNREACHABLE(); } #line 10662 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_only_vars_by_reference, r0 if (MAY_USE_32BIT_ADDR(zend_jit_only_vars_by_reference)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_only_vars_by_reference)); } else { if (IS_SIGNED_32BIT(zend_jit_only_vars_by_reference)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_only_vars_by_reference)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_only_vars_by_reference)), (unsigned int)((((ptrdiff_t)zend_jit_only_vars_by_reference))>>32)); } dasm_put(Dst, 59); } #line 10663 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_check_exception(Dst)) { return 0; } //| jmp >7 dasm_put(Dst, 3631); #line 10667 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code dasm_put(Dst, 386); #line 10670 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (opline->opcode == ZEND_SEND_FUNC_ARG) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && JIT_G(current_frame) && JIT_G(current_frame)->call && JIT_G(current_frame)->call->func) { if (ARG_SHOULD_BE_SENT_BY_REF(JIT_G(current_frame)->call->func, arg_num)) { if (!zend_jit_send_ref(Dst, opline, op_array, op1_info, 0)) { return 0; } return 1; } } else { //| test dword [RX + offsetof(zend_execute_data, This.u1.type_info)], ZEND_CALL_SEND_ARG_BY_REF //| jnz >1 //|.cold_code dasm_put(Dst, 6423, offsetof(zend_execute_data, This.u1.type_info), ZEND_CALL_SEND_ARG_BY_REF); #line 10686 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 10687 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_send_ref(Dst, opline, op_array, op1_info, 1)) { return 0; } //| jmp >7 //|.code dasm_put(Dst, 6390); #line 10692 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op1_info & MAY_BE_UNDEF) { if (op1_info & (MAY_BE_ANY|MAY_BE_REF)) { //| IF_ZVAL_TYPE op1_addr, IS_UNDEF, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 10698 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 3819, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); #line 10699 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 10700 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 10703 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1d, opline->op1.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 2217, opline->op1.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 10705 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO arg_addr, IS_NULL ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); #line 10706 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test r0, r0 //| jz ->exception_handler dasm_put(Dst, 6435, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), IS_NULL); #line 10708 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & (MAY_BE_ANY|MAY_BE_REF)) { //| jmp >7 //|.code dasm_put(Dst, 6390); #line 10712 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //|7: dasm_put(Dst, 4315); #line 10714 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } } if (opline->opcode == ZEND_SEND_VAR_NO_REF) { //| ZVAL_COPY_VALUE arg_addr, MAY_BE_ANY, op1_addr, op1_info, ZREG_R1, ZREG_R2 if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(arg_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(op1_addr)) { if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_addr)), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(arg_addr)), (Z_REG(arg_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (Z_REG(arg_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(arg_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_REG(arg_addr) != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(arg_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R2 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(arg_addr) == IS_REG) { if (Z_REG(op1_addr) != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(op1_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(arg_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(arg_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(arg_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(arg_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R1), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); } #line 10720 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_REF) { //| cmp cl, IS_REFERENCE //| je >7 dasm_put(Dst, 6404, IS_REFERENCE); #line 10723 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 10731 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 10733 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| LOAD_ZVAL_ADDR FCARG1a, arg_addr if (Z_MODE(arg_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(arg_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(arg_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(arg_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(arg_addr)))>>32)); } } else if (Z_MODE(arg_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(arg_addr)) { dasm_put(Dst, 2220, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 2228, (Z_REG(arg_addr))); } } else { ZEND_UNREACHABLE(); } #line 10734 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_only_vars_by_reference, r0 if (MAY_USE_32BIT_ADDR(zend_jit_only_vars_by_reference)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_only_vars_by_reference)); } else { if (IS_SIGNED_32BIT(zend_jit_only_vars_by_reference)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_only_vars_by_reference)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_only_vars_by_reference)), (unsigned int)((((ptrdiff_t)zend_jit_only_vars_by_reference))>>32)); } dasm_put(Dst, 59); } #line 10735 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_check_exception(Dst)) { return 0; } } } else { if (op1_info & MAY_BE_REF) { if (opline->op1_type == IS_CV) { zend_jit_addr val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 10745 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ZVAL_DEREF FCARG1a, op1_info if (op1_info & MAY_BE_REF) { dasm_put(Dst, 5095, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 10746 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ZVAL_COPY_VALUE arg_addr, MAY_BE_ANY, val_addr, op1_info, ZREG_R0, ZREG_R2 if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(arg_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(val_addr)) { if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(val_addr)), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(arg_addr)), (Z_REG(arg_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (Z_REG(arg_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(arg_addr)), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (Z_REG(arg_addr) != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(arg_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (ZREG_R2 != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(arg_addr) == IS_REG) { if (Z_REG(val_addr) != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(val_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(arg_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(arg_addr)-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(val_addr) != IS_REG || ZREG_XMM0 != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(arg_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(arg_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); } #line 10747 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| TRY_ADDREF op1_info, ah, r2 if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (op1_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 2287); } dasm_put(Dst, 2112); } #line 10748 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 8); //| IF_ZVAL_TYPE op1_addr, IS_REFERENCE, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 10752 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 3819, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); #line 10753 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| // zend_refcounted *ref = Z_COUNTED_P(retval_ptr); //| GET_ZVAL_PTR FCARG1a, op1_addr dasm_put(Dst, 63); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 10756 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // ZVAL_COPY_VALUE(return_value, &ref->value); //| ZVAL_COPY_VALUE arg_addr, MAY_BE_ANY, ref_addr, op1_info, ZREG_R0, ZREG_R2 dasm_put(Dst, 4087, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(ref_addr) == IS_REG) { if (Z_MODE(arg_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(ref_addr)) { if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(ref_addr)), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(ref_addr)), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(ref_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(arg_addr)), (Z_REG(arg_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { dasm_put(Dst, 1658, (Z_REG(arg_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(ref_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(ref_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(ref_addr))); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(arg_addr)), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else if (Z_MODE(ref_addr) == IS_REG) { if (Z_REG(arg_addr) != Z_REG(ref_addr)) { dasm_put(Dst, 1682, (Z_REG(ref_addr)), (Z_REG(arg_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(ref_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(ref_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(ref_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(ref_addr))); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else if (Z_MODE(ref_addr) == IS_REG) { if (ZREG_R2 != Z_REG(ref_addr)) { dasm_put(Dst, 1682, (Z_REG(ref_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(ref_addr) == IS_REG) { if (Z_MODE(arg_addr) == IS_REG) { if (Z_REG(ref_addr) != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(ref_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(ref_addr)) { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(ref_addr)); } else { dasm_put(Dst, 1867, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(ref_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(ref_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(arg_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(arg_addr)-ZREG_XMM0)); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { dasm_put(Dst, 1907, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } else if (Z_MODE(ref_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(ref_addr) != IS_REG || ZREG_XMM0 != Z_REG(ref_addr)) { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(ref_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } else if (Z_MODE(ref_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(arg_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(arg_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); } #line 10758 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_DELREF FCARG1a //| je >1 //| IF_NOT_REFCOUNTED ah, >2 //| GC_ADDREF r2 //| jmp >2 //|1: //| EFREE_REG_REFERENCE dasm_put(Dst, 6451); #if ZEND_DEBUG dasm_put(Dst, 3968); if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } #else #ifdef HAVE_BUILTIN_CONSTANT_P if (MAY_USE_32BIT_ADDR(_efree_32)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree_32)); } else { if (IS_SIGNED_32BIT(_efree_32)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree_32)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree_32)), (unsigned int)((((ptrdiff_t)_efree_32))>>32)); } dasm_put(Dst, 59); } #else if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } #endif #endif #line 10765 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >2 //|.code dasm_put(Dst, 2817); #line 10767 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ZVAL_COPY_VALUE arg_addr, MAY_BE_ANY, op1_addr, op1_info, ZREG_R0, ZREG_R2 if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(arg_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(op1_addr)) { if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_addr)), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(arg_addr)), (Z_REG(arg_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (Z_REG(arg_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(arg_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_REG(arg_addr) != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(arg_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R2 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(arg_addr) == IS_REG) { if (Z_REG(op1_addr) != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(op1_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(arg_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(arg_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(arg_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(arg_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); } #line 10768 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 10769 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (op1_addr != op1_def_addr) { if (!zend_jit_update_regs(Dst, opline->op1.var, op1_addr, op1_def_addr, op1_info)) { return 0; } if (Z_MODE(op1_def_addr) == IS_REG && Z_MODE(op1_addr) != IS_REG) { op1_addr= op1_def_addr; } } //| ZVAL_COPY_VALUE arg_addr, MAY_BE_ANY, op1_addr, op1_info, ZREG_R0, ZREG_R2 if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(arg_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(op1_addr)) { if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_addr)), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(arg_addr)), (Z_REG(arg_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (Z_REG(arg_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(arg_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_REG(arg_addr) != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(arg_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R2 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(arg_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(arg_addr))); } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(arg_addr) == IS_REG) { if (Z_REG(op1_addr) != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } else if (Z_MODE(arg_addr) == IS_REG) { if (Z_MODE(op1_addr) != IS_REG || Z_REG(arg_addr) != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(arg_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(arg_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(arg_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(arg_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(arg_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); } #line 10780 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op1_type == IS_CV) { //| TRY_ADDREF op1_info, ah, r2 if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (op1_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 2287); } dasm_put(Dst, 2112); } #line 10782 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } //|7: dasm_put(Dst, 4315); #line 10786 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_check_func_arg(dasm_State **Dst, const zend_op *opline) { uint32_t arg_num = opline->op2.num; if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && JIT_G(current_frame) && JIT_G(current_frame)->call && JIT_G(current_frame)->call->func) { if (ARG_SHOULD_BE_SENT_BY_REF(JIT_G(current_frame)->call->func, arg_num)) { if (!TRACE_FRAME_IS_LAST_SEND_BY_REF(JIT_G(current_frame)->call)) { TRACE_FRAME_SET_LAST_SEND_BY_REF(JIT_G(current_frame)->call); //| // ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); if (reuse_ip) { //| or dword [RX + offsetof(zend_execute_data, This.u1.type_info)], ZEND_CALL_SEND_ARG_BY_REF dasm_put(Dst, 5541, offsetof(zend_execute_data, This.u1.type_info), ZEND_CALL_SEND_ARG_BY_REF); } else { #line 10805 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov r0, EX->call //| or dword [r0 + offsetof(zend_execute_data, This.u1.type_info)], ZEND_CALL_SEND_ARG_BY_REF dasm_put(Dst, 6474, Dt1(->call), offsetof(zend_execute_data, This.u1.type_info), ZEND_CALL_SEND_ARG_BY_REF); } #line 10808 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (!TRACE_FRAME_IS_LAST_SEND_BY_VAL(JIT_G(current_frame)->call)) { TRACE_FRAME_SET_LAST_SEND_BY_VAL(JIT_G(current_frame)->call); //| // ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); if (reuse_ip) { //| and dword [RX + offsetof(zend_execute_data, This.u1.type_info)], ~ZEND_CALL_SEND_ARG_BY_REF dasm_put(Dst, 6483, offsetof(zend_execute_data, This.u1.type_info), ~ZEND_CALL_SEND_ARG_BY_REF); } else { #line 10816 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov r0, EX->call //| and dword [r0 + offsetof(zend_execute_data, This.u1.type_info)], ~ZEND_CALL_SEND_ARG_BY_REF dasm_put(Dst, 6489, Dt1(->call), offsetof(zend_execute_data, This.u1.type_info), ~ZEND_CALL_SEND_ARG_BY_REF); } #line 10819 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else { // if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { uint32_t mask = (ZEND_SEND_BY_REF|ZEND_SEND_PREFER_REF) << ((arg_num + 3) * 2); if (!zend_jit_reuse_ip(Dst)) { return 0; } //| mov r0, EX:RX->func //| test dword [r0 + offsetof(zend_function, quick_arg_flags)], mask //| jnz >1 //|.cold_code dasm_put(Dst, 6225, Dt1(->func), offsetof(zend_function, quick_arg_flags), mask); #line 10833 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| // ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); //| or dword [RX + offsetof(zend_execute_data, This.u1.type_info)], ZEND_CALL_SEND_ARG_BY_REF //| jmp >1 //|.code dasm_put(Dst, 6498, offsetof(zend_execute_data, This.u1.type_info), ZEND_CALL_SEND_ARG_BY_REF); #line 10838 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); //| and dword [RX + offsetof(zend_execute_data, This.u1.type_info)], ~ZEND_CALL_SEND_ARG_BY_REF //|1: dasm_put(Dst, 6511, offsetof(zend_execute_data, This.u1.type_info), ~ZEND_CALL_SEND_ARG_BY_REF); #line 10841 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_smart_true(dasm_State **Dst, const zend_op *opline, int jmp, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2) { if (smart_branch_opcode) { if (smart_branch_opcode == ZEND_JMPZ) { if (jmp) { //| jmp >7 dasm_put(Dst, 3631); #line 10852 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (smart_branch_opcode == ZEND_JMPNZ) { //| jmp =>target_label dasm_put(Dst, 1542, target_label); #line 10855 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } } else { zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 10862 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (jmp) { //| jmp >7 dasm_put(Dst, 3631); #line 10864 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } return 1; } static int zend_jit_smart_false(dasm_State **Dst, const zend_op *opline, int jmp, zend_uchar smart_branch_opcode, uint32_t target_label) { if (smart_branch_opcode) { if (smart_branch_opcode == ZEND_JMPZ) { //| jmp =>target_label dasm_put(Dst, 1542, target_label); #line 10875 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (smart_branch_opcode == ZEND_JMPNZ) { if (jmp) { //| jmp >7 dasm_put(Dst, 3631); #line 10878 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { ZEND_UNREACHABLE(); } } else { zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 10886 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (jmp) { //| jmp >7 dasm_put(Dst, 3631); #line 10888 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } return 1; } static int zend_jit_defined(dasm_State **Dst, const zend_op *opline, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { uint32_t defined_label = (uint32_t)-1; uint32_t undefined_label = (uint32_t)-1; zval *zv = RT_CONSTANT(opline, opline->op1); zend_jit_addr res_addr = 0; if (smart_branch_opcode && !exit_addr) { if (smart_branch_opcode == ZEND_JMPZ) { undefined_label = target_label; } else if (smart_branch_opcode == ZEND_JMPNZ) { defined_label = target_label; } else { ZEND_UNREACHABLE(); } } //| // if (CACHED_PTR(opline->extended_value)) { //| mov r0, EX->run_time_cache //| mov r0, aword [r0 + opline->extended_value] //| test r0, r0 //| jz >1 //| test r0, 0x1 //| jnz >4 //|.cold_code dasm_put(Dst, 6519, Dt1(->run_time_cache), opline->extended_value); #line 10919 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|4: //| MEM_LOAD_ZTS FCARG1a, aword, executor_globals, zend_constants, FCARG1a dasm_put(Dst, 388); if (IS_SIGNED_32BIT(&executor_globals.zend_constants)) { dasm_put(Dst, 6546, &executor_globals.zend_constants); } else { dasm_put(Dst, 6552, (unsigned int)(((ptrdiff_t)&executor_globals.zend_constants)), (unsigned int)((((ptrdiff_t)&executor_globals.zend_constants))>>32)); } #line 10921 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| shr r0, 1 //| cmp dword [FCARG1a + offsetof(HashTable, nNumOfElements)], eax dasm_put(Dst, 6560, offsetof(HashTable, nNumOfElements)); #line 10923 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (smart_branch_opcode) { if (exit_addr) { if (smart_branch_opcode == ZEND_JMPZ) { //| jz &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 10928 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jz >3 dasm_put(Dst, 3901); #line 10930 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (undefined_label != (uint32_t)-1) { //| jz =>undefined_label dasm_put(Dst, 4533, undefined_label); #line 10933 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jz >3 dasm_put(Dst, 3901); #line 10935 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| jz >2 dasm_put(Dst, 1929); #line 10938 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|1: //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 63); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 10941 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| LOAD_ADDR FCARG1a, zv if (IS_SIGNED_32BIT(zv)) { dasm_put(Dst, 759, ((ptrdiff_t)zv)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)zv)), (unsigned int)((((ptrdiff_t)zv))>>32)); } #line 10942 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_check_constant, r0 if (MAY_USE_32BIT_ADDR(zend_jit_check_constant)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_check_constant)); } else { if (IS_SIGNED_32BIT(zend_jit_check_constant)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_check_constant)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_check_constant)), (unsigned int)((((ptrdiff_t)zend_jit_check_constant))>>32)); } dasm_put(Dst, 59); } #line 10943 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test r0, r0 dasm_put(Dst, 3529); #line 10944 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { if (smart_branch_opcode == ZEND_JMPNZ) { //| jz >3 dasm_put(Dst, 3901); #line 10947 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jnz >3 dasm_put(Dst, 316); #line 10949 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 10951 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (smart_branch_opcode) { if (undefined_label != (uint32_t)-1) { //| jz =>undefined_label dasm_put(Dst, 4533, undefined_label); #line 10954 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jz >3 dasm_put(Dst, 3901); #line 10956 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (defined_label != (uint32_t)-1) { //| jmp =>defined_label dasm_put(Dst, 1542, defined_label); #line 10959 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >3 dasm_put(Dst, 3865); #line 10961 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); //| jnz >1 //|2: //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE dasm_put(Dst, 6567); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 10967 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >3 dasm_put(Dst, 6574, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 10968 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code dasm_put(Dst, 386); #line 10970 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (smart_branch_opcode) { if (exit_addr) { if (smart_branch_opcode == ZEND_JMPNZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 10974 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (defined_label != (uint32_t)-1) { //| jmp =>defined_label dasm_put(Dst, 1542, defined_label); #line 10977 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //|1: //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE dasm_put(Dst, 63); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 10981 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|3: dasm_put(Dst, 346); #line 10983 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_type_check(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { uint32_t mask; zend_jit_addr op1_addr = OP1_ADDR(); // TODO: support for is_resource() ??? ZEND_ASSERT(opline->extended_value != MAY_BE_RESOURCE); if (op1_info & MAY_BE_UNDEF) { if (op1_info & (MAY_BE_ANY|MAY_BE_REF)) { //| IF_ZVAL_TYPE op1_addr, IS_UNDEF, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 10998 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 3819, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); #line 10999 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 11000 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 11002 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1d, opline->op1.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 2217, opline->op1.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 11004 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" zend_jit_check_exception_undef_result(Dst, opline); if (opline->extended_value & MAY_BE_NULL) { if (exit_addr) { if (smart_branch_opcode == ZEND_JMPNZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 11009 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if ((op1_info & (MAY_BE_ANY|MAY_BE_REF)) != 0) { //| jmp >7 dasm_put(Dst, 3631); #line 11011 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (!zend_jit_smart_true(Dst, opline, (op1_info & (MAY_BE_ANY|MAY_BE_REF)) != 0, smart_branch_opcode, target_label, target_label2)) { return 0; } } else { if (exit_addr) { if (smart_branch_opcode == ZEND_JMPZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 11019 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if ((op1_info & (MAY_BE_ANY|MAY_BE_REF)) != 0) { //| jmp >7 dasm_put(Dst, 3631); #line 11021 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (!zend_jit_smart_false(Dst, opline, (op1_info & (MAY_BE_ANY|MAY_BE_REF)) != 0, smart_branch_opcode, target_label)) { return 0; } } if (op1_info & (MAY_BE_ANY|MAY_BE_REF)) { //|.code dasm_put(Dst, 386); #line 11028 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op1_info & (MAY_BE_ANY|MAY_BE_REF)) { mask = opline->extended_value; if (!(op1_info & MAY_BE_GUARD) && !(op1_info & (MAY_BE_ANY - mask))) { //| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 11035 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { if (smart_branch_opcode == ZEND_JMPNZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 11038 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (!zend_jit_smart_true(Dst, opline, 0, smart_branch_opcode, target_label, target_label2)) { return 0; } } else if (!(op1_info & MAY_BE_GUARD) && !(op1_info & mask)) { //| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 11044 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { if (smart_branch_opcode == ZEND_JMPZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 11047 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (!zend_jit_smart_false(Dst, opline, 0, smart_branch_opcode, target_label)) { return 0; } } else { bool invert = 0; zend_uchar type; switch (mask) { case MAY_BE_NULL: type = IS_NULL; break; case MAY_BE_FALSE: type = IS_FALSE; break; case MAY_BE_TRUE: type = IS_TRUE; break; case MAY_BE_LONG: type = IS_LONG; break; case MAY_BE_DOUBLE: type = IS_DOUBLE; break; case MAY_BE_STRING: type = IS_STRING; break; case MAY_BE_ARRAY: type = IS_ARRAY; break; case MAY_BE_OBJECT: type = IS_OBJECT; break; case MAY_BE_ANY - MAY_BE_NULL: type = IS_NULL; invert = 1; break; case MAY_BE_ANY - MAY_BE_FALSE: type = IS_FALSE; invert = 1; break; case MAY_BE_ANY - MAY_BE_TRUE: type = IS_TRUE; invert = 1; break; case MAY_BE_ANY - MAY_BE_LONG: type = IS_LONG; invert = 1; break; case MAY_BE_ANY - MAY_BE_DOUBLE: type = IS_DOUBLE; invert = 1; break; case MAY_BE_ANY - MAY_BE_STRING: type = IS_STRING; invert = 1; break; case MAY_BE_ANY - MAY_BE_ARRAY: type = IS_ARRAY; invert = 1; break; case MAY_BE_ANY - MAY_BE_OBJECT: type = IS_OBJECT; invert = 1; break; case MAY_BE_ANY - MAY_BE_RESOURCE: type = IS_OBJECT; invert = 1; break; default: type = 0; } if (op1_info & MAY_BE_REF) { //| LOAD_ZVAL_ADDR r0, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 6282, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 6290, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 11079 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ZVAL_DEREF r0, op1_info if (op1_info & MAY_BE_REF) { dasm_put(Dst, 3711, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 11080 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (type == 0) { if (smart_branch_opcode && (opline->op1_type & (IS_VAR|IS_TMP_VAR)) && (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if ((op1_info) & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| // if (Z_REFCOUNTED_P(cv)) { //| IF_ZVAL_REFCOUNTED op1_addr, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 11088 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 276, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); #line 11089 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 11090 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // if (!Z_DELREF_P(cv)) { //| GET_ZVAL_PTR FCARG1a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 11093 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_DELREF FCARG1a dasm_put(Dst, 305, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 11094 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (RC_MAY_BE_1(op1_info)) { if (RC_MAY_BE_N(op1_info)) { //| jnz >3 dasm_put(Dst, 316); #line 11097 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & MAY_BE_REF) { //| mov al, byte [r0 + 8] dasm_put(Dst, 6587, 8); #line 11100 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov al, byte [FP + opline->op1.var + 8] dasm_put(Dst, 6591, opline->op1.var + 8); #line 11102 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov byte T1, al // save //| // zval_dtor_func(r); //| ZVAL_DTOR_FUNC op1_info, opline dasm_put(Dst, 6596); do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); #line 11106 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov cl, byte T1 // restore //|jmp >2 dasm_put(Dst, 6600); #line 11108 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if ((op1_info) & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (!RC_MAY_BE_1(op1_info)) { //| jmp >3 dasm_put(Dst, 3865); #line 11112 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code dasm_put(Dst, 386); #line 11114 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|3: dasm_put(Dst, 346); #line 11116 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_REF) { //| mov cl, byte [r0 + 8] dasm_put(Dst, 6608, 8); #line 11118 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov cl, byte [FP + opline->op1.var + 8] dasm_put(Dst, 6612, opline->op1.var + 8); #line 11120 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|2: dasm_put(Dst, 1944); #line 11122 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (op1_info & MAY_BE_REF) { //| mov cl, byte [r0 + 8] dasm_put(Dst, 6608, 8); #line 11125 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov cl, byte [FP + opline->op1.var + 8] dasm_put(Dst, 6612, opline->op1.var + 8); #line 11127 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| mov eax, 1 //| shl eax, cl //| test eax, mask dasm_put(Dst, 6617, mask); #line 11132 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { if (smart_branch_opcode == ZEND_JMPNZ) { //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 11135 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 11137 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (smart_branch_opcode) { if (smart_branch_opcode == ZEND_JMPZ) { //| je =>target_label dasm_put(Dst, 4533, target_label); #line 11141 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (smart_branch_opcode == ZEND_JMPNZ) { //| jne =>target_label dasm_put(Dst, 1787, target_label); #line 11143 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } } else { zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); //| setne al //| movzx eax, al //| add eax, 2 //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 6627); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 11153 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 11154 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (smart_branch_opcode && (opline->op1_type & (IS_VAR|IS_TMP_VAR)) && (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if ((op1_info) & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| // if (Z_REFCOUNTED_P(cv)) { //| IF_ZVAL_REFCOUNTED op1_addr, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 11162 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 276, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); #line 11163 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 11164 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // if (!Z_DELREF_P(cv)) { //| GET_ZVAL_PTR FCARG1a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 11167 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_DELREF FCARG1a dasm_put(Dst, 305, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 11168 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (RC_MAY_BE_1(op1_info)) { if (RC_MAY_BE_N(op1_info)) { //| jnz >3 dasm_put(Dst, 316); #line 11171 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & MAY_BE_REF) { //| mov al, byte [r0 + 8] dasm_put(Dst, 6587, 8); #line 11174 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov al, byte [FP + opline->op1.var + 8] dasm_put(Dst, 6591, opline->op1.var + 8); #line 11176 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov byte T1, al // save //| // zval_dtor_func(r); //| ZVAL_DTOR_FUNC op1_info, opline dasm_put(Dst, 6596); do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); #line 11180 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov cl, byte T1 // restore //|jmp >2 dasm_put(Dst, 6600); #line 11182 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if ((op1_info) & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (!RC_MAY_BE_1(op1_info)) { //| jmp >3 dasm_put(Dst, 3865); #line 11186 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code dasm_put(Dst, 386); #line 11188 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|3: dasm_put(Dst, 346); #line 11190 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_REF) { //| mov cl, byte [r0 + 8] dasm_put(Dst, 6608, 8); #line 11192 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov cl, byte [FP + opline->op1.var + 8] dasm_put(Dst, 6612, opline->op1.var + 8); #line 11194 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|2: //| cmp cl, type dasm_put(Dst, 6637, type); #line 11197 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (op1_info & MAY_BE_REF) { //| cmp byte [r0 + 8], type dasm_put(Dst, 3729, 8, type); #line 11200 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| cmp byte [FP + opline->op1.var + 8], type dasm_put(Dst, 6644, opline->op1.var + 8, type); #line 11202 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (exit_addr) { if (invert) { if (smart_branch_opcode == ZEND_JMPNZ) { //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 11208 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 11210 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (smart_branch_opcode == ZEND_JMPNZ) { //| je &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 11214 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 11216 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else if (smart_branch_opcode) { if (invert) { if (smart_branch_opcode == ZEND_JMPZ) { //| je =>target_label dasm_put(Dst, 4533, target_label); #line 11222 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (smart_branch_opcode == ZEND_JMPNZ) { //| jne =>target_label dasm_put(Dst, 1787, target_label); #line 11224 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } } else { if (smart_branch_opcode == ZEND_JMPZ) { //| jne =>target_label dasm_put(Dst, 1787, target_label); #line 11230 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (smart_branch_opcode == ZEND_JMPNZ) { //| je =>target_label dasm_put(Dst, 4533, target_label); #line 11232 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } } } else { zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); if (invert) { //| setne al dasm_put(Dst, 4498); #line 11241 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| sete al dasm_put(Dst, 4494); #line 11243 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| movzx eax, al //| add eax, 2 //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 4561); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 11247 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 11248 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } } //|7: dasm_put(Dst, 4315); #line 11254 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_leave_frame(dasm_State **Dst) { //| // EG(current_execute_data) = EX(prev_execute_data); //| mov r0, EX->prev_execute_data //| MEM_STORE_ZTS aword, executor_globals, current_execute_data, r0, r2 dasm_put(Dst, 5636, Dt1(->prev_execute_data)); if (IS_SIGNED_32BIT(&executor_globals.current_execute_data)) { dasm_put(Dst, 6650, &executor_globals.current_execute_data); } else { dasm_put(Dst, 6656, (unsigned int)(((ptrdiff_t)&executor_globals.current_execute_data)), (unsigned int)((((ptrdiff_t)&executor_globals.current_execute_data))>>32)); } #line 11263 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_free_cvs(dasm_State **Dst) { //| // EG(current_execute_data) = EX(prev_execute_data); //| mov FCARG1a, EX->prev_execute_data //| MEM_STORE_ZTS aword, executor_globals, current_execute_data, FCARG1a, r0 dasm_put(Dst, 525, Dt1(->prev_execute_data)); if (IS_SIGNED_32BIT(&executor_globals.current_execute_data)) { dasm_put(Dst, 530, &executor_globals.current_execute_data); } else { dasm_put(Dst, 536, (unsigned int)(((ptrdiff_t)&executor_globals.current_execute_data)), (unsigned int)((((ptrdiff_t)&executor_globals.current_execute_data))>>32)); } #line 11271 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // zend_free_compiled_variables(execute_data); //| mov FCARG1a, FP //| EXT_CALL zend_free_compiled_variables, r0 dasm_put(Dst, 66); if (MAY_USE_32BIT_ADDR(zend_free_compiled_variables)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_free_compiled_variables)); } else { if (IS_SIGNED_32BIT(zend_free_compiled_variables)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_free_compiled_variables)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_free_compiled_variables)), (unsigned int)((((ptrdiff_t)zend_free_compiled_variables))>>32)); } dasm_put(Dst, 59); } #line 11274 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_free_cv(dasm_State **Dst, uint32_t info, uint32_t var) { if (info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) { uint32_t offset = EX_NUM_TO_VAR(var); //| ZVAL_PTR_DTOR ZEND_ADDR_MEM_ZVAL(ZREG_FP, offset), info, 1, 1, NULL if ((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, offset)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, offset))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, offset))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, offset)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, offset))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, offset))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, offset)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, offset))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, offset))); if (((info) & MAY_BE_GUARD) || RC_MAY_BE_1(info)) { if (((info) & MAY_BE_GUARD) || RC_MAY_BE_N(info)) { if (1 && (((info) & MAY_BE_GUARD) || (RC_MAY_BE_N(info) && ((info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((info) & MAY_BE_GUARD) && has_concrete_type((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (1 && (((info) & MAY_BE_GUARD) || (RC_MAY_BE_N(info) && ((info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (1 && (((info) & MAY_BE_GUARD) || (RC_MAY_BE_N(info) && ((info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, offset)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, offset))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, offset))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } #line 11282 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_free_op(dasm_State **Dst, const zend_op *opline, uint32_t info, uint32_t var_offset) { if (info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) { //| ZVAL_PTR_DTOR ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset), info, 0, 1, opline if ((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset))); if (((info) & MAY_BE_GUARD) || RC_MAY_BE_1(info)) { if (((info) & MAY_BE_GUARD) || RC_MAY_BE_N(info)) { if (0 && (((info) & MAY_BE_GUARD) || (RC_MAY_BE_N(info) && ((info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((info) & MAY_BE_GUARD) && has_concrete_type((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((info) & MAY_BE_GUARD) || (RC_MAY_BE_N(info) && ((info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((info) & MAY_BE_GUARD) || (RC_MAY_BE_N(info) && ((info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } #line 11290 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_leave_func(dasm_State **Dst, const zend_op_array *op_array, const zend_op *opline, uint32_t op1_info, bool left_frame, zend_jit_trace_rec *trace, zend_jit_trace_info *trace_info, int indirect_var_access, int may_throw) { bool may_be_top_frame = JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || !JIT_G(current_frame) || !TRACE_FRAME_IS_NESTED(JIT_G(current_frame)); bool may_need_call_helper = indirect_var_access || /* may have symbol table */ !op_array->function_name || /* may have symbol table */ may_be_top_frame || (op_array->fn_flags & ZEND_ACC_VARIADIC) || /* may have extra named args */ JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || !JIT_G(current_frame) || TRACE_FRAME_NUM_ARGS(JIT_G(current_frame)) == -1 || /* unknown number of args */ (uint32_t)TRACE_FRAME_NUM_ARGS(JIT_G(current_frame)) > op_array->num_args; /* extra args */ bool may_need_release_this = !(op_array->fn_flags & ZEND_ACC_CLOSURE) && op_array->scope && !(op_array->fn_flags & ZEND_ACC_STATIC) && (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || !JIT_G(current_frame) || !TRACE_FRAME_NO_NEED_RELEASE_THIS(JIT_G(current_frame))); if (may_need_release_this) { //| mov FCARG1d, dword [FP + offsetof(zend_execute_data, This.u1.type_info)] dasm_put(Dst, 438, offsetof(zend_execute_data, This.u1.type_info)); #line 11327 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (may_need_call_helper) { if (!left_frame) { left_frame = 1; if (!zend_jit_leave_frame(Dst)) { return 0; } } /* ZEND_CALL_FAKE_CLOSURE handled on slow path to eliminate check for ZEND_CALL_CLOSURE on fast path */ if (may_need_release_this) { //| test FCARG1d, (ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_FAKE_CLOSURE) dasm_put(Dst, 6664, (ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_FAKE_CLOSURE)); #line 11338 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| test dword [FP + offsetof(zend_execute_data, This.u1.type_info)], (ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_FAKE_CLOSURE) dasm_put(Dst, 6669, offsetof(zend_execute_data, This.u1.type_info), (ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_FAKE_CLOSURE)); #line 11340 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (trace && trace->op != ZEND_JIT_TRACE_END) { //| jnz >1 //|.cold_code dasm_put(Dst, 285); #line 11344 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 11345 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!GCC_GLOBAL_REGS) { //| mov FCARG1a, FP dasm_put(Dst, 66); #line 11347 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_jit_leave_func_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_leave_func_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_leave_func_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_leave_func_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_leave_func_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_leave_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_leave_func_helper))>>32)); } dasm_put(Dst, 59); } #line 11349 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_be_top_frame) { // TODO: try to avoid this check ??? if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { #if 0 /* this check should be handled by the following OPLINE guard */ //| cmp IP, zend_jit_halt_op //| je ->trace_halt dasm_put(Dst, 1725, zend_jit_halt_op); #line 11357 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #endif } else if (GCC_GLOBAL_REGS) { //| test IP, IP //| je ->trace_halt dasm_put(Dst, 1735); #line 11361 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| test eax, eax //| jl ->trace_halt dasm_put(Dst, 1744); #line 11364 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!GCC_GLOBAL_REGS) { //| // execute_data = EG(current_execute_data) //| MEM_LOAD_ZTS FP, aword, executor_globals, current_execute_data, r0 if (IS_SIGNED_32BIT(&executor_globals.current_execute_data)) { dasm_put(Dst, 87, &executor_globals.current_execute_data); } else { dasm_put(Dst, 93, (unsigned int)(((ptrdiff_t)&executor_globals.current_execute_data)), (unsigned int)((((ptrdiff_t)&executor_globals.current_execute_data))>>32)); } #line 11370 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jmp >8 //|.code dasm_put(Dst, 6676); #line 11373 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jnz ->leave_function_handler dasm_put(Dst, 6682); #line 11375 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op_array->fn_flags & ZEND_ACC_CLOSURE) { if (!left_frame) { left_frame = 1; if (!zend_jit_leave_frame(Dst)) { return 0; } } //| // OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func))); //| mov FCARG1a, EX->func //| sub FCARG1a, sizeof(zend_object) //| OBJ_RELEASE ZREG_FCARG1, >4 dasm_put(Dst, 6687, Dt1(->func), sizeof(zend_object), (ZREG_FCARG1), 0); if (ZREG_FCARG1 != ZREG_FCARG1) { dasm_put(Dst, 2228, (ZREG_FCARG1)); } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } dasm_put(Dst, 6709, (ZREG_FCARG1), (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (ZREG_FCARG1 != ZREG_FCARG1) { dasm_put(Dst, 2228, (ZREG_FCARG1)); } if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } #line 11389 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|4: dasm_put(Dst, 6728); #line 11390 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (may_need_release_this) { if (!left_frame) { left_frame = 1; if (!zend_jit_leave_frame(Dst)) { return 0; } } if (!JIT_G(current_frame) || !TRACE_FRAME_ALWAYS_RELEASE_THIS(JIT_G(current_frame))) { //| // if (call_info & ZEND_CALL_RELEASE_THIS) //| test FCARG1d, ZEND_CALL_RELEASE_THIS //| je >4 dasm_put(Dst, 6733, ZEND_CALL_RELEASE_THIS); #line 11401 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // zend_object *object = Z_OBJ(execute_data->This); //| mov FCARG1a, EX->This.value.obj //| // OBJ_RELEASE(object); //| OBJ_RELEASE ZREG_FCARG1, >4 dasm_put(Dst, 6742, Dt1(->This.value.obj), (ZREG_FCARG1), 0); if (ZREG_FCARG1 != ZREG_FCARG1) { dasm_put(Dst, 2228, (ZREG_FCARG1)); } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } dasm_put(Dst, 6709, (ZREG_FCARG1), (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (ZREG_FCARG1 != ZREG_FCARG1) { dasm_put(Dst, 2228, (ZREG_FCARG1)); } if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } #line 11406 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|4: dasm_put(Dst, 6728); #line 11407 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" // TODO: avoid EG(excption) check for $this->foo() calls may_throw = 1; } //| // EG(vm_stack_top) = (zval*)execute_data; //| MEM_STORE_ZTS aword, executor_globals, vm_stack_top, FP, r0 if (IS_SIGNED_32BIT(&executor_globals.vm_stack_top)) { dasm_put(Dst, 6134, &executor_globals.vm_stack_top); } else { dasm_put(Dst, 6140, (unsigned int)(((ptrdiff_t)&executor_globals.vm_stack_top)), (unsigned int)((((ptrdiff_t)&executor_globals.vm_stack_top))>>32)); } #line 11413 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // execute_data = EX(prev_execute_data); //| mov FP, EX->prev_execute_data dasm_put(Dst, 6759, Dt1(->prev_execute_data)); #line 11415 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!left_frame) { //| // EG(current_execute_data) = execute_data; //| MEM_STORE_ZTS aword, executor_globals, current_execute_data, FP, r0 if (IS_SIGNED_32BIT(&executor_globals.current_execute_data)) { dasm_put(Dst, 6134, &executor_globals.current_execute_data); } else { dasm_put(Dst, 6140, (unsigned int)(((ptrdiff_t)&executor_globals.current_execute_data)), (unsigned int)((((ptrdiff_t)&executor_globals.current_execute_data))>>32)); } #line 11419 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|9: dasm_put(Dst, 4072); #line 11422 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (trace) { if (trace->op != ZEND_JIT_TRACE_END && (JIT_G(current_frame) && !TRACE_FRAME_IS_UNKNOWN_RETURN(JIT_G(current_frame)))) { zend_jit_reset_last_valid_opline(); } else { //| LOAD_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 0, Dt1(->opline)); } #line 11428 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ADD_IP sizeof(zend_op) if (GCC_GLOBAL_REGS) { dasm_put(Dst, 1514, sizeof(zend_op)); } else { dasm_put(Dst, 1519, Dt1(->opline), sizeof(zend_op)); } #line 11429 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|8: dasm_put(Dst, 4117); #line 11432 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (trace->op == ZEND_JIT_TRACE_BACK && (!JIT_G(current_frame) || TRACE_FRAME_IS_UNKNOWN_RETURN(JIT_G(current_frame)))) { const zend_op *next_opline = trace->opline; if ((opline->op1_type & (IS_VAR|IS_TMP_VAR)) && (op1_info & MAY_BE_RC1) && (op1_info & (MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_ARRAY))) { /* exception might be thrown during destruction of unused return value */ //| // if (EG(exception)) //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.exception)) { dasm_put(Dst, 71, &executor_globals.exception); } else { dasm_put(Dst, 78, (unsigned int)(((ptrdiff_t)&executor_globals.exception)), (unsigned int)((((ptrdiff_t)&executor_globals.exception))>>32)); } #line 11443 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne ->leave_throw_handler dasm_put(Dst, 6764); #line 11444 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } do { trace++; } while (trace->op == ZEND_JIT_TRACE_INIT_CALL); ZEND_ASSERT(trace->op == ZEND_JIT_TRACE_VM || trace->op == ZEND_JIT_TRACE_END); next_opline = trace->opline; ZEND_ASSERT(next_opline != NULL); if (trace->op == ZEND_JIT_TRACE_END && trace->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_RET) { trace_info->flags |= ZEND_JIT_TRACE_LOOP; //| CMP_IP next_opline if (GCC_GLOBAL_REGS) { dasm_put(Dst, 1756, next_opline); } else { dasm_put(Dst, 1762, Dt1(->opline), next_opline); } #line 11456 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| je =>0 // LOOP dasm_put(Dst, 4533, 0); #line 11457 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 11459 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #else //| jmp ->trace_escape dasm_put(Dst, 1597); #line 11461 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #endif } else { //| CMP_IP next_opline if (GCC_GLOBAL_REGS) { dasm_put(Dst, 1756, next_opline); } else { dasm_put(Dst, 1762, Dt1(->opline), next_opline); } #line 11464 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne ->trace_escape dasm_put(Dst, 6769); #line 11465 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } zend_jit_set_last_valid_opline(trace->opline); return 1; } else if (may_throw || (((opline->op1_type & (IS_VAR|IS_TMP_VAR)) && (op1_info & MAY_BE_RC1) && (op1_info & (MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_ARRAY))) && (!JIT_G(current_frame) || TRACE_FRAME_IS_RETURN_VALUE_UNUSED(JIT_G(current_frame))))) { //| // if (EG(exception)) //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.exception)) { dasm_put(Dst, 71, &executor_globals.exception); } else { dasm_put(Dst, 78, (unsigned int)(((ptrdiff_t)&executor_globals.exception)), (unsigned int)((((ptrdiff_t)&executor_globals.exception))>>32)); } #line 11477 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne ->leave_throw_handler dasm_put(Dst, 6764); #line 11478 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } else { //| // if (EG(exception)) //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 if (IS_SIGNED_32BIT(&executor_globals.exception)) { dasm_put(Dst, 71, &executor_globals.exception); } else { dasm_put(Dst, 78, (unsigned int)(((ptrdiff_t)&executor_globals.exception)), (unsigned int)((((ptrdiff_t)&executor_globals.exception))>>32)); } #line 11484 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| LOAD_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 0, Dt1(->opline)); } #line 11485 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne ->leave_throw_handler //| // opline = EX(opline) + 1 //| ADD_IP sizeof(zend_op) dasm_put(Dst, 6764); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 1514, sizeof(zend_op)); } else { dasm_put(Dst, 1519, Dt1(->opline), sizeof(zend_op)); } #line 11488 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (zend_jit_vm_kind == ZEND_VM_KIND_HYBRID) { //| ADD_HYBRID_SPAD #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE dasm_put(Dst, 101); #endif #line 11492 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #ifdef CONTEXT_THREADED_JIT //| push aword [IP] //| ret dasm_put(Dst, 6774); #line 11495 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #else //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 11497 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #endif } else if (GCC_GLOBAL_REGS) { //| add r4, SPAD // stack alignment dasm_put(Dst, 119); #line 11500 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #ifdef CONTEXT_THREADED_JIT //| push aword [IP] //| ret dasm_put(Dst, 6774); #line 11503 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #else //| JMP_IP if (GCC_GLOBAL_REGS) { dasm_put(Dst, 106); } else { dasm_put(Dst, 111, Dt1(->opline)); } #line 11505 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #endif } else { #ifdef CONTEXT_THREADED_JIT ZEND_UNREACHABLE(); // TODO: context threading can't work without GLOBAL REGS because we have to change // the value of execute_data in execute_ex() //| mov FCARG1a, FP //| mov r0, aword [FP] //| mov FP, aword T2 // restore FP //| mov RX, aword T3 // restore IP //| add r4, NR_SPAD // stack alignment //| push aword [r0] //| ret dasm_put(Dst, 6780); #line 11518 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #else //| mov FP, aword T2 // restore FP //| mov RX, aword T3 // restore IP //| add r4, NR_SPAD // stack alignment //| mov r0, 2 // ZEND_VM_LEAVE //| ret dasm_put(Dst, 544); #line 11524 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #endif } return 1; } static int zend_jit_return(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_jit_addr op1_addr) { zend_jit_addr ret_addr; int8_t return_value_used; ZEND_ASSERT(op_array->type != ZEND_EVAL_CODE && op_array->function_name); ZEND_ASSERT(!(op1_info & MAY_BE_UNDEF)); if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && JIT_G(current_frame)) { if (TRACE_FRAME_IS_RETURN_VALUE_USED(JIT_G(current_frame))) { return_value_used = 1; } else if (TRACE_FRAME_IS_RETURN_VALUE_UNUSED(JIT_G(current_frame))) { return_value_used = 0; } else { return_value_used = -1; } } else { return_value_used = -1; } if (ZEND_OBSERVER_ENABLED) { if (Z_MODE(op1_addr) == IS_REG) { zend_jit_addr dst = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var); if (!zend_jit_spill_store(Dst, op1_addr, dst, op1_info, 1)) { return 0; } op1_addr = dst; } //| LOAD_ZVAL_ADDR FCARG2a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2255, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 11560 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1a, FP //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 66); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 11562 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_observer_fcall_end, r0 if (MAY_USE_32BIT_ADDR(zend_observer_fcall_end)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_observer_fcall_end)); } else { if (IS_SIGNED_32BIT(zend_observer_fcall_end)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_observer_fcall_end)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_observer_fcall_end)), (unsigned int)((((ptrdiff_t)zend_observer_fcall_end))>>32)); } dasm_put(Dst, 59); } #line 11563 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } // if (!EX(return_value)) if (Z_MODE(op1_addr) == IS_REG && Z_REG(op1_addr) == ZREG_R1) { if (return_value_used != 0) { //| mov r2, EX->return_value dasm_put(Dst, 900, Dt1(->return_value)); #line 11569 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (return_value_used == -1) { //| test r2, r2 dasm_put(Dst, 6806); #line 11572 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } ret_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R2, 0); } else { if (return_value_used != 0) { //| mov r1, EX->return_value dasm_put(Dst, 5611, Dt1(->return_value)); #line 11577 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (return_value_used == -1) { //| test r1, r1 dasm_put(Dst, 6810); #line 11580 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } ret_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R1, 0); } if ((opline->op1_type & (IS_VAR|IS_TMP_VAR)) && (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (return_value_used == -1) { //| jz >1 //|.cold_code dasm_put(Dst, 3472); #line 11588 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 11589 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (return_value_used != 1) { if (op1_info & ((MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (jit_return_label >= 0) { //| IF_NOT_ZVAL_REFCOUNTED op1_addr, =>jit_return_label ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 6814, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED, jit_return_label); #line 11594 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_REFCOUNTED op1_addr, >9 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 6827, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); #line 11596 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| GET_ZVAL_PTR FCARG1a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 11599 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_DELREF FCARG1a dasm_put(Dst, 305, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 11600 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (RC_MAY_BE_1(op1_info)) { if (RC_MAY_BE_N(op1_info)) { if (jit_return_label >= 0) { //| jnz =>jit_return_label dasm_put(Dst, 1787, jit_return_label); #line 11604 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jnz >9 dasm_put(Dst, 4984); #line 11606 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| //SAVE_OPLINE() //| ZVAL_DTOR_FUNC op1_info, opline do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); #line 11610 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| //????mov r1, EX->return_value // reload ??? } if (return_value_used == -1) { if (jit_return_label >= 0) { //| jmp =>jit_return_label dasm_put(Dst, 1542, jit_return_label); #line 11615 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >9 dasm_put(Dst, 3591); #line 11617 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code dasm_put(Dst, 386); #line 11619 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else if (return_value_used == -1) { if (jit_return_label >= 0) { //| jz =>jit_return_label dasm_put(Dst, 4533, jit_return_label); #line 11624 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jz >9 dasm_put(Dst, 3586); #line 11626 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (return_value_used == 0) { //|9: dasm_put(Dst, 4072); #line 11631 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } if (opline->op1_type == IS_CONST) { zval *zv = RT_CONSTANT(opline, opline->op1); //| ZVAL_COPY_CONST ret_addr, MAY_BE_ANY, MAY_BE_ANY, zv, ZREG_R0 if (Z_TYPE_P(zv) > IS_TRUE) { if (Z_TYPE_P(zv) == IS_DOUBLE) { zend_reg dst_reg = (Z_MODE(ret_addr) == IS_REG) ? Z_REG(ret_addr) : ZREG_XMM0; if (Z_DVAL_P(zv) == 0.0 && !is_signed(Z_DVAL_P(zv))) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } else if (!IS_SIGNED_32BIT(zv)) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(((uintptr_t)zv)), (unsigned int)((((uintptr_t)zv))>>32)); if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); } else { dasm_put(Dst, 1907, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); } } else { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); } else { dasm_put(Dst, 1867, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); } } if (Z_MODE(ret_addr) == IS_REG) { if (dst_reg != Z_REG(ret_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ret_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ret_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (dst_reg-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { dasm_put(Dst, 1844, (dst_reg-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else if (Z_TYPE_P(zv) == IS_LONG && MAY_BE_ANY == MAY_BE_DOUBLE) { zend_reg dst_reg = (Z_MODE(ret_addr) == IS_REG) ? Z_REG(ret_addr) : ZREG_XMM0; if (Z_LVAL_P(zv) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(zv)); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (ZREG_R0)); } else { dasm_put(Dst, 2659, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (ZREG_R0)); } } if (Z_MODE(ret_addr) == IS_REG) { if (dst_reg != Z_REG(ret_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ret_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ret_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (dst_reg-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { dasm_put(Dst, 1844, (dst_reg-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else if (Z_LVAL_P(zv) == 0 && Z_MODE(ret_addr) == IS_REG) { dasm_put(Dst, 1650, (Z_REG(ret_addr)), (Z_REG(ret_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { if (Z_MODE(ret_addr) == IS_REG) { dasm_put(Dst, 1658, (Z_REG(ret_addr)), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); } else { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); if (Z_MODE(ret_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R0), (Z_REG(ret_addr))); } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else { if (Z_MODE(ret_addr) == IS_REG) { dasm_put(Dst, 1665, (Z_REG(ret_addr)), Z_LVAL_P(zv)); } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3768, (Z_REG(ret_addr)), Z_OFFSET(ret_addr), Z_LVAL_P(zv)); } } } } if (Z_MODE(ret_addr) == IS_MEM_ZVAL) { if (MAY_BE_ANY == MAY_BE_DOUBLE) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != MAY_BE_DOUBLE) { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); } } else if (((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (1<<Z_TYPE_P(zv))) || (MAY_BE_ANY & (MAY_BE_STRING|MAY_BE_ARRAY)) != 0) { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info), Z_TYPE_INFO_P(zv)); } } #line 11637 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REFCOUNTED_P(zv)) { //| ADDREF_CONST zv, r0 if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 6246, (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); } else { dasm_put(Dst, 3792, Z_LVAL_P(zv)); } #line 11639 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (opline->op1_type == IS_TMP_VAR) { //| ZVAL_COPY_VALUE ret_addr, MAY_BE_ANY, op1_addr, op1_info, ZREG_R0, ZREG_R2 if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(ret_addr) != IS_REG || Z_REG(ret_addr) != Z_REG(op1_addr)) { if (Z_MODE(ret_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(ret_addr))); } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_addr)), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else if (Z_MODE(ret_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(ret_addr)), (Z_REG(ret_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (Z_REG(ret_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(ret_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(ret_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_REG(ret_addr) != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(ret_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R2 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(ret_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(ret_addr))); } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(ret_addr) == IS_REG) { if (Z_REG(op1_addr) != Z_REG(ret_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else if (Z_MODE(ret_addr) == IS_REG) { if (Z_MODE(op1_addr) != IS_REG || Z_REG(ret_addr) != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(ret_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(ret_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(ret_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(ret_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ret_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ret_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(ret_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info)); } #line 11642 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opline->op1_type == IS_CV) { if (op1_info & MAY_BE_REF) { //| LOAD_ZVAL_ADDR r0, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 6282, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 6290, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 11645 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ZVAL_DEREF r0, op1_info if (op1_info & MAY_BE_REF) { dasm_put(Dst, 3711, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 11646 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0); } //| ZVAL_COPY_VALUE ret_addr, MAY_BE_ANY, op1_addr, op1_info, ZREG_R0, ZREG_R2 if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(ret_addr) != IS_REG || Z_REG(ret_addr) != Z_REG(op1_addr)) { if (Z_MODE(ret_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(ret_addr))); } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_addr)), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else if (Z_MODE(ret_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(ret_addr)), (Z_REG(ret_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (Z_REG(ret_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(ret_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(ret_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_REG(ret_addr) != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(ret_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R2 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(ret_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(ret_addr))); } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(ret_addr) == IS_REG) { if (Z_REG(op1_addr) != Z_REG(ret_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else if (Z_MODE(ret_addr) == IS_REG) { if (Z_MODE(op1_addr) != IS_REG || Z_REG(ret_addr) != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(ret_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(ret_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(ret_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(ret_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ret_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ret_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(ret_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info)); } #line 11649 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || (op1_info & (MAY_BE_REF|MAY_BE_OBJECT)) || !op_array->function_name) { //| TRY_ADDREF op1_info, ah, r2 if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (op1_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 2287); } dasm_put(Dst, 2112); } #line 11654 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (return_value_used != 1) { //| // if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) ZVAL_NULL(retval_ptr); //| SET_ZVAL_TYPE_INFO op1_addr, IS_NULL ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_NULL); #line 11657 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else { if (op1_info & MAY_BE_REF) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, offsetof(zend_reference, val)); //| IF_ZVAL_TYPE op1_addr, IS_REFERENCE, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 11664 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 3819, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); #line 11665 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| // zend_refcounted *ref = Z_COUNTED_P(retval_ptr); //| GET_ZVAL_PTR r0, op1_addr dasm_put(Dst, 63); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 11668 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // ZVAL_COPY_VALUE(return_value, &ref->value); //| ZVAL_COPY_VALUE ret_addr, MAY_BE_ANY, ref_addr, op1_info, ZREG_R2, ZREG_R2 dasm_put(Dst, 5810, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(ref_addr) == IS_REG) { if (Z_MODE(ret_addr) != IS_REG || Z_REG(ret_addr) != Z_REG(ref_addr)) { if (Z_MODE(ret_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(ref_addr)), (Z_REG(ret_addr))); } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(ref_addr)), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else if (Z_MODE(ret_addr) == IS_REG) { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(ref_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(ret_addr)), (Z_REG(ret_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { dasm_put(Dst, 1658, (Z_REG(ret_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(ref_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(ref_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(ret_addr)), Z_LVAL_P(Z_ZV(ref_addr))); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(ret_addr)), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else if (Z_MODE(ref_addr) == IS_REG) { if (Z_REG(ret_addr) != Z_REG(ref_addr)) { dasm_put(Dst, 1682, (Z_REG(ref_addr)), (Z_REG(ret_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(ref_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(ref_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(ref_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(ref_addr))); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else if (Z_MODE(ref_addr) == IS_REG) { if (ZREG_R2 != Z_REG(ref_addr)) { dasm_put(Dst, 1682, (Z_REG(ref_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(ret_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(ret_addr))); } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(ref_addr) == IS_REG) { if (Z_MODE(ret_addr) == IS_REG) { if (Z_REG(ref_addr) != Z_REG(ret_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { dasm_put(Dst, 1844, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else if (Z_MODE(ret_addr) == IS_REG) { if (Z_MODE(ref_addr) != IS_REG || Z_REG(ret_addr) != Z_REG(ref_addr)) { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(ref_addr)); } else { dasm_put(Dst, 1867, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(ref_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(ref_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(ret_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(ret_addr)-ZREG_XMM0)); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { dasm_put(Dst, 1907, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } else if (Z_MODE(ref_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(ref_addr) != IS_REG || ZREG_XMM0 != Z_REG(ref_addr)) { if (Z_MODE(ref_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(ref_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } } else if (Z_MODE(ref_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(ret_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(ret_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ret_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ret_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(ret_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info)); } #line 11670 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_DELREF r0 //| je >2 //| // if (IS_REFCOUNTED()) dasm_put(Dst, 6841); #line 11673 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (jit_return_label >= 0) { //| IF_NOT_REFCOUNTED dh, =>jit_return_label dasm_put(Dst, 6849, jit_return_label); #line 11675 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_REFCOUNTED dh, >9 dasm_put(Dst, 6856); #line 11677 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // ADDREF //| GET_ZVAL_PTR r2, ret_addr // reload ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); #line 11680 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_ADDREF r2 dasm_put(Dst, 6864, (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); #line 11681 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (jit_return_label >= 0) { //| jmp =>jit_return_label dasm_put(Dst, 1542, jit_return_label); #line 11683 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >9 dasm_put(Dst, 3591); #line 11685 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|2: //| EFREE_REFERENCE r0 dasm_put(Dst, 4238); #if ZEND_DEBUG dasm_put(Dst, 3968); if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } #else #ifdef HAVE_BUILTIN_CONSTANT_P if (MAY_USE_32BIT_ADDR(_efree_32)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree_32)); } else { if (IS_SIGNED_32BIT(_efree_32)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree_32)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree_32)), (unsigned int)((((ptrdiff_t)_efree_32))>>32)); } dasm_put(Dst, 59); } #else if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } #endif #endif #line 11688 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (jit_return_label >= 0) { //| jmp =>jit_return_label dasm_put(Dst, 1542, jit_return_label); #line 11690 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >9 dasm_put(Dst, 3591); #line 11692 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code dasm_put(Dst, 386); #line 11694 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| ZVAL_COPY_VALUE ret_addr, MAY_BE_ANY, op1_addr, op1_info, ZREG_R0, ZREG_R2 if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(ret_addr) != IS_REG || Z_REG(ret_addr) != Z_REG(op1_addr)) { if (Z_MODE(ret_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(ret_addr))); } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_addr)), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else if (Z_MODE(ret_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(ret_addr)), (Z_REG(ret_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (Z_REG(ret_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(ret_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(ret_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_REG(ret_addr) != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(ret_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R2 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(ret_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(ret_addr))); } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(ret_addr) == IS_REG) { if (Z_REG(op1_addr) != Z_REG(ret_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } else if (Z_MODE(ret_addr) == IS_REG) { if (Z_MODE(op1_addr) != IS_REG || Z_REG(ret_addr) != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(ret_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(ret_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(ret_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(ret_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(ret_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(ret_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(ret_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info)); } #line 11696 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|9: dasm_put(Dst, 4072); #line 11699 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_zval_copy_deref(dasm_State **Dst, zend_jit_addr res_addr, zend_jit_addr val_addr, zend_reg type_reg) { ZEND_ASSERT(type_reg == ZREG_R2); //|.if not(X64) #line 11708 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_W2 r0, val_addr #line 11710 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.endif //| GET_ZVAL_PTR r1, val_addr ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); #line 11712 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) #line 11714 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_W2 r0, val_addr #line 11716 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.endif //| IF_NOT_REFCOUNTED dh, >2 //| IF_NOT_TYPE dl, IS_REFERENCE, >1 //| GET_Z_TYPE_INFO edx, r1+offsetof(zend_reference, val) //|.if not(X64) //| GET_Z_W2 r0, r1+offsetof(zend_reference, val) //|.endif //| GET_Z_PTR r1, r1+offsetof(zend_reference, val) //| IF_NOT_REFCOUNTED dh, >2 //|1: //| GC_ADDREF r1 //|2: //| SET_ZVAL_PTR res_addr, r1 dasm_put(Dst, 6875, (Z_REG(val_addr)), Z_OFFSET(val_addr), IS_REFERENCE, offsetof(zend_reference, val)+offsetof(zval,u1.type_info), offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 11729 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) //| SET_ZVAL_W2 res_addr, r0 //|.endif //| SET_ZVAL_TYPE_INFO res_addr, edx dasm_put(Dst, 6336, (Z_REG(res_addr)), Z_OFFSET(res_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 6919, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 11733 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_fetch_dim_read(dasm_State **Dst, const zend_op *opline, zend_ssa *ssa, const zend_ssa_op *ssa_op, uint32_t op1_info, zend_jit_addr op1_addr, bool op1_avoid_refcounting, uint32_t op2_info, uint32_t res_info, zend_jit_addr res_addr, uint8_t dim_type) { zend_jit_addr orig_op1_addr, op2_addr; const void *exit_addr = NULL; const void *not_found_exit_addr = NULL; const void *res_exit_addr = NULL; bool result_avoid_refcounting = 0; uint32_t may_be_string = (opline->opcode != ZEND_FETCH_LIST_R) ? MAY_BE_STRING : 0; int may_throw = 0; orig_op1_addr = OP1_ADDR(); op2_addr = OP2_ADDR(); if (opline->opcode != ZEND_FETCH_DIM_IS && JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } } if ((res_info & MAY_BE_GUARD) && JIT_G(current_frame) && (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_ARRAY) { uint32_t flags = 0; uint32_t old_op1_info = 0; uint32_t old_info; zend_jit_trace_stack *stack = JIT_G(current_frame)->stack; int32_t exit_point; if (opline->opcode != ZEND_FETCH_LIST_R && (opline->op1_type & (IS_VAR|IS_TMP_VAR)) && !op1_avoid_refcounting) { flags |= ZEND_JIT_EXIT_FREE_OP1; } if ((opline->op2_type & (IS_VAR|IS_TMP_VAR)) && (op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { flags |= ZEND_JIT_EXIT_FREE_OP2; } if ((opline->result_type & (IS_VAR|IS_TMP_VAR)) && !(flags & ZEND_JIT_EXIT_FREE_OP1) && (res_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) && (ssa_op+1)->op1_use == ssa_op->result_def && !(op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF) - (MAY_BE_STRING|MAY_BE_LONG))) && zend_jit_may_avoid_refcounting(opline+1, res_info)) { result_avoid_refcounting = 1; ssa->var_info[ssa_op->result_def].avoid_refcounting = 1; } if (op1_avoid_refcounting) { old_op1_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var)); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->op1.var), ZREG_NONE); } if (!(op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF) - (MAY_BE_STRING|MAY_BE_LONG)))) { old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_COPY_GPR0); exit_point = zend_jit_trace_get_exit_point(opline+1, flags); SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info); res_exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!res_exit_addr) { return 0; } res_info &= ~MAY_BE_GUARD; ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; } if (opline->opcode == ZEND_FETCH_DIM_IS && !(res_info & MAY_BE_NULL)) { old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_NULL, 0); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_NULL); exit_point = zend_jit_trace_get_exit_point(opline+1, flags); SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info); not_found_exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!not_found_exit_addr) { return 0; } } if (op1_avoid_refcounting) { SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var), old_op1_info); } } if (op1_info & MAY_BE_REF) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 11836 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ZVAL_DEREF FCARG1a, op1_info if (op1_info & MAY_BE_REF) { dasm_put(Dst, 5095, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 11837 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } if (op1_info & MAY_BE_ARRAY) { if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - MAY_BE_ARRAY)) { if (exit_addr && !(op1_info & (MAY_BE_OBJECT|may_be_string))) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_ARRAY, &exit_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_ARRAY, (ptrdiff_t)(exit_addr)); #line 11844 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_ARRAY, >7 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4217, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_ARRAY); #line 11846 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| GET_ZVAL_LVAL ZREG_FCARG1, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } #line 11849 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_LONG|MAY_BE_STRING))) || (opline->opcode != ZEND_FETCH_DIM_IS && JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE)) { may_throw = 1; } if (!zend_jit_fetch_dimension_address_inner(Dst, opline, (opline->opcode != ZEND_FETCH_DIM_IS) ? BP_VAR_R : BP_VAR_IS, op1_info, op2_info, dim_type, res_exit_addr, not_found_exit_addr, exit_addr)) { return 0; } } if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_ARRAY)) { if (op1_info & MAY_BE_ARRAY) { //|.cold_code dasm_put(Dst, 289); #line 11861 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|7: dasm_put(Dst, 4315); #line 11862 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode != ZEND_FETCH_LIST_R && (op1_info & MAY_BE_STRING)) { may_throw = 1; if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_ARRAY|MAY_BE_STRING))) { if (exit_addr && !(op1_info & MAY_BE_OBJECT)) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_STRING, &exit_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING, (ptrdiff_t)(exit_addr)); #line 11869 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_STRING, >6 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING); #line 11871 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 11874 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_LVAL ZREG_FCARG1, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } #line 11875 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode != ZEND_FETCH_DIM_IS) { if ((op2_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) == MAY_BE_LONG) { //| GET_ZVAL_LVAL ZREG_FCARG2, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op2_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG2), (ZREG_FCARG2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG2), (unsigned int)(Z_LVAL_P(Z_ZV(op2_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op2_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); } } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG2), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else if (Z_MODE(op2_addr) == IS_REG) { if (ZREG_FCARG2 != Z_REG(op2_addr)) { dasm_put(Dst, 1682, (Z_REG(op2_addr)), (ZREG_FCARG2)); } } else { ZEND_UNREACHABLE(); } #line 11878 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_fetch_dim_str_offset_r_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_dim_str_offset_r_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_dim_str_offset_r_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_dim_str_offset_r_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_dim_str_offset_r_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_str_offset_r_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_str_offset_r_helper))>>32)); } dasm_put(Dst, 59); } #line 11879 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LOAD_ZVAL_ADDR FCARG2a, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 11881 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_fetch_dim_str_r_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_dim_str_r_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_dim_str_r_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_dim_str_r_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_dim_str_r_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_str_r_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_str_r_helper))>>32)); } dasm_put(Dst, 59); } #line 11882 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_ZVAL_PTR res_addr, r0 ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 11884 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_STRING dasm_put(Dst, 2191, (Z_REG(res_addr)), Z_OFFSET(res_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_STRING); #line 11885 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LOAD_ZVAL_ADDR FCARG2a, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 11887 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| LOAD_ZVAL_ADDR CARG3, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 3303, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 3311, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 11889 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ZVAL_ADDR res_addr, r0 //|.endif //| EXT_CALL zend_jit_fetch_dim_str_is_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_dim_str_is_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_dim_str_is_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_dim_str_is_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_dim_str_is_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_str_is_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_str_is_helper))>>32)); } dasm_put(Dst, 59); } #line 11894 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) //| add r4, 12 //|.endif } if ((op1_info & MAY_BE_ARRAY) || (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_ARRAY|MAY_BE_STRING)))) { //| jmp >9 // END dasm_put(Dst, 3591); #line 11901 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|6: dasm_put(Dst, 3290); #line 11903 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & MAY_BE_OBJECT) { may_throw = 1; if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_ARRAY|MAY_BE_OBJECT|may_be_string))) { if (exit_addr) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_OBJECT, &exit_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT, (ptrdiff_t)(exit_addr)); #line 11910 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_OBJECT, >6 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT); #line 11912 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 11915 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 11917 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->op2_type == IS_CONST && Z_EXTRA_P(RT_CONSTANT(opline, opline->op2)) == ZEND_EXTRA_VALUE) { ZEND_ASSERT(Z_MODE(op2_addr) == IS_CONST_ZVAL); //| LOAD_ADDR FCARG2a, (Z_ZV(op2_addr) + 1) if (IS_SIGNED_32BIT((Z_ZV(op2_addr) + 1))) { dasm_put(Dst, 712, ((ptrdiff_t)(Z_ZV(op2_addr) + 1))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)(Z_ZV(op2_addr) + 1))), (unsigned int)((((ptrdiff_t)(Z_ZV(op2_addr) + 1)))>>32)); } #line 11921 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LOAD_ZVAL_ADDR FCARG2a, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 11923 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if X64 //| LOAD_ZVAL_ADDR CARG3, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 3303, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 3311, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 11926 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ZVAL_ADDR res_addr, r0 //|.endif if (opline->opcode != ZEND_FETCH_DIM_IS) { //| EXT_CALL zend_jit_fetch_dim_obj_r_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_dim_obj_r_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_dim_obj_r_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_dim_obj_r_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_dim_obj_r_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_obj_r_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_obj_r_helper))>>32)); } dasm_put(Dst, 59); } #line 11932 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_fetch_dim_obj_is_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_dim_obj_is_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_dim_obj_is_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_dim_obj_is_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_dim_obj_is_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_obj_is_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_obj_is_helper))>>32)); } dasm_put(Dst, 59); } #line 11934 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if not(X64) //| add r4, 12 //|.endif if ((op1_info & MAY_BE_ARRAY) || (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_ARRAY|MAY_BE_OBJECT|may_be_string)))) { //| jmp >9 // END dasm_put(Dst, 3591); #line 11941 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|6: dasm_put(Dst, 3290); #line 11943 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if ((op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_ARRAY|MAY_BE_OBJECT|may_be_string))) && (!exit_addr || !(op1_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|may_be_string)))) { if ((opline->opcode != ZEND_FETCH_DIM_IS && (op1_info & MAY_BE_UNDEF)) || (op2_info & MAY_BE_UNDEF)) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 11949 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode != ZEND_FETCH_DIM_IS && (op1_info & MAY_BE_UNDEF)) { may_throw = 1; //| IF_NOT_ZVAL_TYPE op1_addr, IS_UNDEF, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 11952 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(CV_DEF_OF(EX_VAR_TO_NUM(opline->op1.var)))); //| mov FCARG1d, opline->op1.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 6927, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF, opline->op1.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 11955 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 11956 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op2_info & MAY_BE_UNDEF) { may_throw = 1; //| IF_NOT_ZVAL_TYPE op2_addr, IS_UNDEF, >1 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); #line 11961 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1d, opline->op2.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 6927, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_UNDEF, opline->op2.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 11963 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 11964 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (opline->opcode != ZEND_FETCH_DIM_IS && opline->opcode != ZEND_FETCH_LIST_R) { may_throw = 1; if ((op1_info & MAY_BE_UNDEF) || (op2_info & MAY_BE_UNDEF)) { //| LOAD_ZVAL_ADDR FCARG1a, orig_op1_addr if (Z_MODE(orig_op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(orig_op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(orig_op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(orig_op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(orig_op1_addr)))>>32)); } } else if (Z_MODE(orig_op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(orig_op1_addr)) { dasm_put(Dst, 2220, (Z_REG(orig_op1_addr)), Z_OFFSET(orig_op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(orig_op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 11971 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 11973 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(op1_addr) != IS_MEM_ZVAL || Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 11977 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| EXT_CALL zend_jit_invalid_array_access, r0 if (MAY_USE_32BIT_ADDR(zend_jit_invalid_array_access)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_invalid_array_access)); } else { if (IS_SIGNED_32BIT(zend_jit_invalid_array_access)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_invalid_array_access)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_invalid_array_access)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_array_access))>>32)); } dasm_put(Dst, 59); } #line 11980 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_ZVAL_TYPE_INFO res_addr, IS_NULL ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); #line 11982 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_ARRAY) { //| jmp >9 // END dasm_put(Dst, 3591); #line 11984 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op1_info & MAY_BE_ARRAY) { //|.code dasm_put(Dst, 386); #line 11989 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op1_info & MAY_BE_ARRAY) { zend_jit_addr val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0); //|8: dasm_put(Dst, 4117); #line 11996 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (res_exit_addr) { zend_uchar type = concrete_type(res_info); if ((op1_info & MAY_BE_ARRAY_OF_REF) && dim_type != IS_UNKNOWN && dim_type != IS_REFERENCE) { if (type < IS_STRING) { //| IF_NOT_ZVAL_TYPE val_addr, type, >1 ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); #line 12004 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 3265, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), type); #line 12005 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| IF_NOT_ZVAL_TYPE val_addr, IS_REFERENCE, &res_exit_addr dasm_put(Dst, 63); ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); #line 12007 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_Z_PTR r0, r0 //| add r0, offsetof(zend_reference, val) //| IF_ZVAL_TYPE val_addr, type, >1 dasm_put(Dst, 6942, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_REFERENCE, (ptrdiff_t)(res_exit_addr), offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); #line 12010 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp &res_exit_addr //|.code dasm_put(Dst, 6961, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), type, (ptrdiff_t)(res_exit_addr)); #line 12012 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 12013 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| GET_ZVAL_TYPE_INFO edx, val_addr ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); #line 12015 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_NOT_TYPE dl, type, >1 //|.cold_code dasm_put(Dst, 6978, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info), type); #line 12017 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| IF_NOT_TYPE dl, IS_REFERENCE, &res_exit_addr //| GET_Z_PTR r0, r0 //| add r0, offsetof(zend_reference, val) //| GET_ZVAL_TYPE_INFO edx, val_addr dasm_put(Dst, 6995, IS_REFERENCE, (ptrdiff_t)(res_exit_addr), offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); #line 12022 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_TYPE dl, type, >1 //| jmp &res_exit_addr //|.code dasm_put(Dst, 7012, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info), type, (ptrdiff_t)(res_exit_addr)); #line 12025 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 12026 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (op1_info & MAY_BE_ARRAY_OF_REF) { //| ZVAL_DEREF r0, MAY_BE_REF if (MAY_BE_REF & MAY_BE_REF) { dasm_put(Dst, 3711, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 12030 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (type < IS_STRING) { //| IF_NOT_ZVAL_TYPE val_addr, type, &res_exit_addr ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), type, (ptrdiff_t)(res_exit_addr)); #line 12033 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| GET_ZVAL_TYPE_INFO edx, val_addr ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); #line 12035 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_NOT_TYPE dl, type, &res_exit_addr dasm_put(Dst, 7032, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info), type, (ptrdiff_t)(res_exit_addr)); #line 12036 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| // ZVAL_COPY //|7: //| ZVAL_COPY_VALUE_V res_addr, -1, val_addr, res_info, ZREG_R0, ZREG_R1 dasm_put(Dst, 4315); if (res_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((res_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(val_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(val_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R1), (ZREG_R1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (ZREG_R1), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R1), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (ZREG_R1 != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (ZREG_R1)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R1), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((res_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(val_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(val_addr) != IS_REG || Z_REG(res_addr) != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(val_addr) != IS_REG || ZREG_XMM0 != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(res_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } #line 12042 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (type < IS_STRING) { if (Z_REG(res_addr) != ZREG_FP || JIT_G(current_frame) == NULL || STACK_MEM_TYPE(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(Z_OFFSET(res_addr))) != type) { //| SET_ZVAL_TYPE_INFO res_addr, type ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); #line 12048 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| SET_ZVAL_TYPE_INFO res_addr, edx ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 6919, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 12051 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!result_avoid_refcounting) { //| TRY_ADDREF res_info, dh, r1 if (res_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (res_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 3981); } dasm_put(Dst, 2078); } #line 12053 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, res_info)) { return 0; } } else if (op1_info & MAY_BE_ARRAY_OF_REF) { //| // ZVAL_COPY_DEREF //| GET_ZVAL_TYPE_INFO Rd(ZREG_R2), val_addr ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info)); #line 12061 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_zval_copy_deref(Dst, res_addr, val_addr, ZREG_R2)) { return 0; } } else { //| // ZVAL_COPY //| ZVAL_COPY_VALUE res_addr, -1, val_addr, res_info, ZREG_R1, ZREG_R2 if (res_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((res_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(val_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(val_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (ZREG_R2 != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((res_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(val_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(val_addr) != IS_REG || Z_REG(res_addr) != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(val_addr) != IS_REG || ZREG_XMM0 != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(res_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((res_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(res_info & MAY_BE_GUARD) && has_concrete_type(res_info & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((-1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (res_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(res_info); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R1), (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 12067 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| TRY_ADDREF res_info, ch, r2 if (res_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (res_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 2104); } dasm_put(Dst, 2112); } #line 12068 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //|9: // END dasm_put(Dst, 4072); #line 12071 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" #ifdef ZEND_JIT_USE_RC_INFERENCE if ((opline->op2_type & (IS_TMP_VAR|IS_VAR)) && (op1_info & MAY_BE_OBJECT)) { /* Magic offsetGet() may increase refcount of the key */ op2_info |= MAY_BE_RCN; } #endif if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) { if ((op2_info & MAY_HAVE_DTOR) && (op2_info & MAY_BE_RC1)) { may_throw = 1; } //| FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 12084 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode != ZEND_FETCH_LIST_R && !op1_avoid_refcounting) { if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { if ((op1_info & MAY_HAVE_DTOR) && (op1_info & MAY_BE_RC1)) { may_throw = 1; } //| FREE_OP opline->op1_type, opline->op1, op1_info, 0, opline if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 12091 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (may_throw) { if (!zend_jit_check_exception(Dst)) { return 0; } } return 1; } static int zend_jit_fetch_dim(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr res_addr, uint8_t dim_type) { zend_jit_addr op2_addr; int may_throw = 0; op2_addr = (opline->op2_type != IS_UNUSED) ? OP2_ADDR() : 0; if (opline->opcode == ZEND_FETCH_DIM_RW) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 12118 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & MAY_BE_REF) { may_throw = 1; //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 12122 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_NOT_Z_TYPE FCARG1a, IS_REFERENCE, >1 //| GET_Z_PTR FCARG2a, FCARG1a //| IF_NOT_TYPE byte [FCARG2a + offsetof(zend_reference, val) + offsetof(zval, u1.v.type)], IS_ARRAY, >2 //| lea FCARG1a, [FCARG2a + offsetof(zend_reference, val)] //| jmp >3 //|.cold_code dasm_put(Dst, 4172, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val) + offsetof(zval, u1.v.type), IS_ARRAY, offsetof(zend_reference, val)); #line 12128 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 12129 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode != ZEND_FETCH_DIM_RW) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 12131 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_jit_prepare_assign_dim_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_prepare_assign_dim_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_prepare_assign_dim_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_prepare_assign_dim_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_prepare_assign_dim_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_prepare_assign_dim_ref)), (unsigned int)((((ptrdiff_t)zend_jit_prepare_assign_dim_ref))>>32)); } dasm_put(Dst, 59); } #line 12133 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test r0, r0 //| mov FCARG1a, r0 //| jne >1 //| jmp ->exception_handler_undef //|.code dasm_put(Dst, 4201); #line 12138 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 12139 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } if (op1_info & MAY_BE_ARRAY) { if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - MAY_BE_ARRAY)) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_ARRAY, >7 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4217, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_ARRAY); #line 12145 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|3: //| SEPARATE_ARRAY op1_addr, op1_info, 1 dasm_put(Dst, 346); if (RC_MAY_BE_N(op1_info)) { if (Z_REG(op1_addr) != ZREG_FP) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R0), (ZREG_R0)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_R0 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_R0)); } } else { ZEND_UNREACHABLE(); } if (RC_MAY_BE_1(op1_info)) { dasm_put(Dst, 4230); } if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } } if (MAY_USE_32BIT_ADDR(zend_jit_zval_array_dup)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_zval_array_dup)); } else { if (IS_SIGNED_32BIT(zend_jit_zval_array_dup)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_zval_array_dup)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_zval_array_dup)), (unsigned int)((((ptrdiff_t)zend_jit_zval_array_dup))>>32)); } dasm_put(Dst, 59); } dasm_put(Dst, 4238); } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } if (RC_MAY_BE_1(op1_info)) { dasm_put(Dst, 4244); if (1) { dasm_put(Dst, 4248); dasm_put(Dst, 63); } else { dasm_put(Dst, 3558); } } ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4254, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); if (MAY_USE_32BIT_ADDR(zend_array_dup)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_dup)); } else { if (IS_SIGNED_32BIT(zend_array_dup)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_dup)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_dup)), (unsigned int)((((ptrdiff_t)zend_array_dup))>>32)); } dasm_put(Dst, 59); } ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4273, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_ARRAY_EX); if (RC_MAY_BE_1(op1_info)) { if (1) { dasm_put(Dst, 2817); } } dasm_put(Dst, 1944); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } } #line 12148 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL)) { if (op1_info & MAY_BE_ARRAY) { //|.cold_code dasm_put(Dst, 289); #line 12152 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|7: dasm_put(Dst, 4315); #line 12153 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_ARRAY))) { //| CMP_ZVAL_TYPE op1_addr, IS_NULL ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 12156 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jg >7 dasm_put(Dst, 4285, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_NULL); #line 12157 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_REG(op1_addr) != ZREG_FP) { //| mov T1, Ra(Z_REG(op1_addr)) // save dasm_put(Dst, 3426, (Z_REG(op1_addr))); #line 12160 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if ((op1_info & MAY_BE_UNDEF) && opline->opcode == ZEND_FETCH_DIM_RW) { may_throw = 1; if (op1_info & MAY_BE_NULL) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_UNDEF, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); #line 12166 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov FCARG1a, opline->op1.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 759, opline->op1.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 12169 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 12170 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // ZVAL_ARR(container, zend_new_array(8)); //| EXT_CALL _zend_new_array_0, r0 if (MAY_USE_32BIT_ADDR(_zend_new_array_0)) { dasm_put(Dst, 46, (ptrdiff_t)(_zend_new_array_0)); } else { if (IS_SIGNED_32BIT(_zend_new_array_0)) { dasm_put(Dst, 49, ((ptrdiff_t)_zend_new_array_0)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_zend_new_array_0)), (unsigned int)((((ptrdiff_t)_zend_new_array_0))>>32)); } dasm_put(Dst, 59); } #line 12173 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(op1_addr) != ZREG_FP) { //| mov Ra(Z_REG(op1_addr)), T1 // restore dasm_put(Dst, 3448, (Z_REG(op1_addr))); #line 12175 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_ZVAL_LVAL op1_addr, r0 if (Z_MODE(op1_addr) == IS_REG) { dasm_put(Dst, 2185, (Z_REG(op1_addr))); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } #line 12177 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO op1_addr, IS_ARRAY_EX ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 12178 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1a, r0 dasm_put(Dst, 4273, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_ARRAY_EX); #line 12179 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_ARRAY) { //| jmp >1 //|.code dasm_put(Dst, 3691); #line 12182 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 12183 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_ARRAY)) { //|6: dasm_put(Dst, 3290); #line 12188 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op2_type == IS_UNUSED) { may_throw = 1; //| // var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval)); //| LOAD_ADDR_ZTS FCARG2a, executor_globals, uninitialized_zval if (IS_SIGNED_32BIT(&executor_globals.uninitialized_zval)) { dasm_put(Dst, 712, ((ptrdiff_t)&executor_globals.uninitialized_zval)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)&executor_globals.uninitialized_zval)), (unsigned int)((((ptrdiff_t)&executor_globals.uninitialized_zval))>>32)); } #line 12192 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_hash_next_index_insert, r0 if (MAY_USE_32BIT_ADDR(zend_hash_next_index_insert)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_next_index_insert)); } else { if (IS_SIGNED_32BIT(zend_hash_next_index_insert)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_next_index_insert)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_next_index_insert)), (unsigned int)((((ptrdiff_t)zend_hash_next_index_insert))>>32)); } dasm_put(Dst, 59); } #line 12193 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // if (UNEXPECTED(!var_ptr)) { //| test r0, r0 //| jz >1 //|.cold_code dasm_put(Dst, 4298); #line 12197 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| // zend_throw_error(NULL, "Cannot add element to the array as the next element is already occupied"); //| CANNOT_ADD_ELEMENT opline dasm_put(Dst, 63); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); dasm_put(Dst, 4307); } else { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } dasm_put(Dst, 4311); } #line 12200 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_UNDEF ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 12201 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| //ZEND_VM_C_GOTO(assign_dim_op_ret_null); //| jmp >8 //|.code dasm_put(Dst, 7047, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_UNDEF); #line 12204 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_PTR res_addr, r0 ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 12205 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_INDIRECT dasm_put(Dst, 2191, (Z_REG(res_addr)), Z_OFFSET(res_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_INDIRECT); #line 12206 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { uint32_t type; switch (opline->opcode) { case ZEND_FETCH_DIM_W: case ZEND_FETCH_LIST_W: type = BP_VAR_W; break; case ZEND_FETCH_DIM_RW: may_throw = 1; type = BP_VAR_RW; break; case ZEND_FETCH_DIM_UNSET: type = BP_VAR_UNSET; break; default: ZEND_UNREACHABLE(); } if (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_LONG|MAY_BE_STRING))) { may_throw = 1; } if (!zend_jit_fetch_dimension_address_inner(Dst, opline, type, op1_info, op2_info, dim_type, NULL, NULL, NULL)) { return 0; } //|8: //| SET_ZVAL_PTR res_addr, r0 dasm_put(Dst, 4117); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 12234 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_INDIRECT dasm_put(Dst, 2191, (Z_REG(res_addr)), Z_OFFSET(res_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_INDIRECT); #line 12235 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (type == BP_VAR_RW || (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_LONG|MAY_BE_STRING)))) { //|.cold_code dasm_put(Dst, 289); #line 12238 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|9: //| SET_ZVAL_TYPE_INFO res_addr, IS_NULL dasm_put(Dst, 4072); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 12240 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >8 //|.code dasm_put(Dst, 7047, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); #line 12242 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_ARRAY))) { may_throw = 1; if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_ARRAY)) { //|.cold_code dasm_put(Dst, 289); #line 12250 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|7: dasm_put(Dst, 4315); #line 12251 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode != ZEND_FETCH_DIM_RW) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 12255 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 12258 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->op2_type == IS_UNUSED) { //| xor FCARG2a, FCARG2a dasm_put(Dst, 2269); #line 12261 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opline->op2_type == IS_CONST && Z_EXTRA_P(RT_CONSTANT(opline, opline->op2)) == ZEND_EXTRA_VALUE) { ZEND_ASSERT(Z_MODE(op2_addr) == IS_CONST_ZVAL); //| LOAD_ADDR FCARG2a, (Z_ZV(op2_addr) + 1) if (IS_SIGNED_32BIT((Z_ZV(op2_addr) + 1))) { dasm_put(Dst, 712, ((ptrdiff_t)(Z_ZV(op2_addr) + 1))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)(Z_ZV(op2_addr) + 1))), (unsigned int)((((ptrdiff_t)(Z_ZV(op2_addr) + 1)))>>32)); } #line 12264 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LOAD_ZVAL_ADDR FCARG2a, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 12266 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if X64 //| LOAD_ZVAL_ADDR CARG3, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 3303, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 3311, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 12269 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ZVAL_ADDR res_addr, r0 //|.endif switch (opline->opcode) { case ZEND_FETCH_DIM_W: case ZEND_FETCH_LIST_W: //| EXT_CALL zend_jit_fetch_dim_obj_w_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_dim_obj_w_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_dim_obj_w_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_dim_obj_w_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_dim_obj_w_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_obj_w_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_obj_w_helper))>>32)); } dasm_put(Dst, 59); } #line 12277 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_FETCH_DIM_RW: //| EXT_CALL zend_jit_fetch_dim_obj_rw_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_dim_obj_rw_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_dim_obj_rw_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_dim_obj_rw_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_dim_obj_rw_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_obj_rw_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_obj_rw_helper))>>32)); } dasm_put(Dst, 59); } #line 12280 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; // case ZEND_FETCH_DIM_UNSET: // | EXT_CALL zend_jit_fetch_dim_obj_unset_helper, r0 // break; default: ZEND_UNREACHABLE(); } //|.if not(X64) //| add r4, 12 //|.endif if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_ARRAY)) { //| jmp >8 // END //|.code dasm_put(Dst, 6676); #line 12294 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } #ifdef ZEND_JIT_USE_RC_INFERENCE if ((opline->op2_type & (IS_TMP_VAR|IS_VAR)) && (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_ARRAY|MAY_BE_OBJECT))) { /* ASSIGN_DIM may increase refcount of the key */ op2_info |= MAY_BE_RCN; } #endif if ((opline->op2_type & (IS_TMP_VAR|IS_VAR)) && (op2_info & MAY_HAVE_DTOR) && (op2_info & MAY_BE_RC1)) { may_throw = 1; } //|8: //| FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline dasm_put(Dst, 4117); if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 12311 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { if (!zend_jit_check_exception(Dst)) { return 0; } } return 1; } static int zend_jit_isset_isempty_dim(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, bool op1_avoid_refcounting, uint32_t op2_info, uint8_t dim_type, int may_throw, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { zend_jit_addr op2_addr, res_addr; // TODO: support for empty() ??? ZEND_ASSERT(!(opline->extended_value & ZEND_ISEMPTY)); op2_addr = OP2_ADDR(); res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); if (op1_info & MAY_BE_REF) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 12344 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ZVAL_DEREF FCARG1a, op1_info if (op1_info & MAY_BE_REF) { dasm_put(Dst, 5095, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 12345 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } if (op1_info & MAY_BE_ARRAY) { const void *found_exit_addr = NULL; const void *not_found_exit_addr = NULL; if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - MAY_BE_ARRAY)) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_ARRAY, >7 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4217, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_ARRAY); #line 12354 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| GET_ZVAL_LVAL ZREG_FCARG1, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } #line 12356 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr && !(op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_ARRAY)) && !may_throw && (!(opline->op1_type & (IS_TMP_VAR|IS_VAR)) || op1_avoid_refcounting) && (!(opline->op2_type & (IS_TMP_VAR|IS_VAR)) || !(op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_LONG)))) { if (smart_branch_opcode == ZEND_JMPNZ) { found_exit_addr = exit_addr; } else { not_found_exit_addr = exit_addr; } } if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_JIT_IS, op1_info, op2_info, dim_type, found_exit_addr, not_found_exit_addr, NULL)) { return 0; } if (found_exit_addr) { //|9: dasm_put(Dst, 4072); #line 12373 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } else if (not_found_exit_addr) { //|8: dasm_put(Dst, 4117); #line 12376 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } } if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_ARRAY)) { if (op1_info & MAY_BE_ARRAY) { //|.cold_code dasm_put(Dst, 289); #line 12383 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|7: dasm_put(Dst, 4315); #line 12384 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & (MAY_BE_STRING|MAY_BE_OBJECT)) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 12388 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 12390 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->op2_type == IS_CONST && Z_EXTRA_P(RT_CONSTANT(opline, opline->op2)) == ZEND_EXTRA_VALUE) { ZEND_ASSERT(Z_MODE(op2_addr) == IS_CONST_ZVAL); //| LOAD_ADDR FCARG2a, (Z_ZV(op2_addr) + 1) if (IS_SIGNED_32BIT((Z_ZV(op2_addr) + 1))) { dasm_put(Dst, 712, ((ptrdiff_t)(Z_ZV(op2_addr) + 1))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)(Z_ZV(op2_addr) + 1))), (unsigned int)((((ptrdiff_t)(Z_ZV(op2_addr) + 1)))>>32)); } #line 12394 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LOAD_ZVAL_ADDR FCARG2a, op2_addr if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op2_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); } } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op2_addr)) { dasm_put(Dst, 2255, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op2_addr))); } } else { ZEND_UNREACHABLE(); } #line 12396 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_jit_isset_dim_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_isset_dim_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_isset_dim_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_isset_dim_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_isset_dim_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_isset_dim_helper)), (unsigned int)((((ptrdiff_t)zend_jit_isset_dim_helper))>>32)); } dasm_put(Dst, 59); } #line 12398 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test r0, r0 //| jz >9 dasm_put(Dst, 7061); #line 12400 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_ARRAY) { //| jmp >8 //|.code dasm_put(Dst, 6676); #line 12403 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (op2_info & MAY_BE_UNDEF) { if (op2_info & MAY_BE_ANY) { //| IF_NOT_ZVAL_TYPE op2_addr, IS_UNDEF, >1 ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_UNDEF); #line 12408 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 12410 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1d, opline->op2.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 2217, opline->op2.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 12412 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 12413 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & MAY_BE_ARRAY) { //| jmp >9 //|.code dasm_put(Dst, 4046); #line 12417 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } #ifdef ZEND_JIT_USE_RC_INFERENCE if ((opline->op2_type & (IS_TMP_VAR|IS_VAR)) && (op1_info & MAY_BE_OBJECT)) { /* Magic offsetExists() may increase refcount of the key */ op2_info |= MAY_BE_RCN; } #endif if (op1_info & (MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_OBJECT)) { //|8: //| FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline dasm_put(Dst, 4117); if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 12431 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!op1_avoid_refcounting) { //| FREE_OP opline->op1_type, opline->op1, op1_info, 0, opline if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 12433 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (may_throw) { if (!zend_jit_check_exception_undef_result(Dst, opline)) { return 0; } } if (!(opline->extended_value & ZEND_ISEMPTY)) { if (exit_addr) { if (smart_branch_opcode == ZEND_JMPNZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 12443 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >8 dasm_put(Dst, 3676); #line 12445 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (smart_branch_opcode) { if (smart_branch_opcode == ZEND_JMPZ) { //| jmp =>target_label2 dasm_put(Dst, 1542, target_label2); #line 12449 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (smart_branch_opcode == ZEND_JMPNZ) { //| jmp =>target_label dasm_put(Dst, 1542, target_label); #line 12451 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } } else { //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 12456 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >8 dasm_put(Dst, 7069, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 12457 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| NIY // TODO: support for empty() //ZEND_ASSERT(0); dasm_put(Dst, 1459); #line 12460 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //|9: // not found //| FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline dasm_put(Dst, 4072); if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) { if ((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))); if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op2_info)) { if (((op2_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op2_info)) { if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op2_info) & MAY_BE_GUARD) && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op2_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op2_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op2_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op2_info) && ((op2_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op2_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op2_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 12465 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!op1_avoid_refcounting) { //| FREE_OP opline->op1_type, opline->op1, op1_info, 0, opline if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 12467 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (may_throw) { if (!zend_jit_check_exception_undef_result(Dst, opline)) { return 0; } } if (!(opline->extended_value & ZEND_ISEMPTY)) { if (exit_addr) { if (smart_branch_opcode == ZEND_JMPZ) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 12477 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (smart_branch_opcode) { if (smart_branch_opcode == ZEND_JMPZ) { //| jmp =>target_label dasm_put(Dst, 1542, target_label); #line 12481 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (smart_branch_opcode == ZEND_JMPNZ) { } else { ZEND_UNREACHABLE(); } } else { //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 12487 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| NIY // TODO: support for empty() //ZEND_ASSERT(0); dasm_put(Dst, 1459); #line 12490 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|8: dasm_put(Dst, 4117); #line 12493 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_t op1_info) { zend_jit_addr op1_addr = OP1_ADDR(); zend_string *varname = Z_STR_P(RT_CONSTANT(opline, opline->op2)); //| // idx = (uint32_t)(uintptr_t)CACHED_PTR(opline->extended_value) - 1; //| mov FCARG2a, EX->run_time_cache //| mov r0, aword [FCARG2a + opline->extended_value] //| sub r0, 1 //| // if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) //| MEM_LOAD_ZTS ecx, dword, executor_globals, symbol_table.nNumUsed, r1 dasm_put(Dst, 7082, Dt1(->run_time_cache), opline->extended_value); if (IS_SIGNED_32BIT(&executor_globals.symbol_table.nNumUsed)) { dasm_put(Dst, 5334, &executor_globals.symbol_table.nNumUsed); } else { dasm_put(Dst, 7095, (unsigned int)(((ptrdiff_t)&executor_globals.symbol_table.nNumUsed)), (unsigned int)((((ptrdiff_t)&executor_globals.symbol_table.nNumUsed))>>32)); } #line 12508 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| shl r1, 5 //|.else //| imul r1, sizeof(Bucket) //|.endif //| cmp r0, r1 //| jae >9 //| // Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx); //| MEM_LOAD_OP_ZTS add, r0, aword, executor_globals, symbol_table.arData, r1 dasm_put(Dst, 7102); if (IS_SIGNED_32BIT(&executor_globals.symbol_table.arData)) { dasm_put(Dst, 7114, &executor_globals.symbol_table.arData); } else { dasm_put(Dst, 7120, (unsigned int)(((ptrdiff_t)&executor_globals.symbol_table.arData)), (unsigned int)((((ptrdiff_t)&executor_globals.symbol_table.arData))>>32)); } #line 12517 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_NOT_Z_TYPE r0, IS_REFERENCE, >9 //| // (EXPECTED(p->key == varname)) //| ADDR_CMP aword [r0 + offsetof(Bucket, key)], varname, r1 dasm_put(Dst, 7128, offsetof(zval, u1.v.type), IS_REFERENCE); if (IS_SIGNED_32BIT(varname)) { dasm_put(Dst, 5693, offsetof(Bucket, key), ((ptrdiff_t)varname)); } else { dasm_put(Dst, 5684, (unsigned int)(((ptrdiff_t)varname)), (unsigned int)((((ptrdiff_t)varname))>>32), offsetof(Bucket, key)); } #line 12520 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jne >9 //| GET_Z_PTR r0, r0 //| GC_ADDREF r0 //|1: dasm_put(Dst, 7137); #line 12524 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) { if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| // if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) //| IF_ZVAL_REFCOUNTED op1_addr, >2 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 12528 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 7150, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); #line 12529 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 12530 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // zend_refcounted *garbage = Z_COUNTED_P(variable_ptr); //| GET_ZVAL_PTR FCARG1a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 12533 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // ZVAL_REF(variable_ptr, ref) //| SET_ZVAL_PTR op1_addr, r0 dasm_put(Dst, 4087, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 12535 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO op1_addr, IS_REFERENCE_EX dasm_put(Dst, 2191, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 12536 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // if (GC_DELREF(garbage) == 0) //| GC_DELREF FCARG1a dasm_put(Dst, 7165, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_REFERENCE_EX); #line 12538 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) { //| jnz >3 dasm_put(Dst, 316); #line 12540 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jnz >5 dasm_put(Dst, 4149); #line 12542 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| ZVAL_DTOR_FUNC op1_info, opline do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); #line 12544 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >5 dasm_put(Dst, 3285); #line 12545 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) { //|3: //| // GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr) //| IF_GC_MAY_NOT_LEAK FCARG1a, >5 //| EXT_CALL gc_possible_root, r1 dasm_put(Dst, 7177, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 4353, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 4358, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 7189); } #line 12550 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >5 dasm_put(Dst, 3285); #line 12551 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //|.code dasm_put(Dst, 386); #line 12554 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| // ZVAL_REF(variable_ptr, ref) //| SET_ZVAL_PTR op1_addr, r0 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 12560 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO op1_addr, IS_REFERENCE_EX dasm_put(Dst, 2191, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_REFERENCE_EX); #line 12561 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|5: dasm_put(Dst, 498); #line 12563 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //END of handler //|.cold_code dasm_put(Dst, 289); #line 12566 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|9: //| LOAD_ADDR FCARG1a, (ptrdiff_t)varname dasm_put(Dst, 4072); if (IS_SIGNED_32BIT((ptrdiff_t)varname)) { dasm_put(Dst, 759, ((ptrdiff_t)(ptrdiff_t)varname)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)(ptrdiff_t)varname)), (unsigned int)((((ptrdiff_t)(ptrdiff_t)varname))>>32)); } #line 12568 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->extended_value) { //| add FCARG2a, opline->extended_value dasm_put(Dst, 7193, opline->extended_value); #line 12570 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_jit_fetch_global_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_global_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_global_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_global_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_global_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_global_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_global_helper))>>32)); } dasm_put(Dst, 59); } #line 12572 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp <1 //|.code dasm_put(Dst, 7198); #line 12574 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_verify_arg_type(dasm_State **Dst, const zend_op *opline, zend_arg_info *arg_info, bool check_exception) { zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); bool in_cold = 0; uint32_t type_mask = ZEND_TYPE_PURE_MASK(arg_info->type) & MAY_BE_ANY; zend_reg tmp_reg = (type_mask == 0 || is_power_of_two(type_mask)) ? ZREG_FCARG1 : ZREG_R0; if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && JIT_G(current_frame) && JIT_G(current_frame)->prev) { zend_jit_trace_stack *stack = JIT_G(current_frame)->stack; uint8_t type = STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var)); if (type != IS_UNKNOWN && (type_mask & (1u << type))) { return 1; } } if (ZEND_ARG_SEND_MODE(arg_info)) { if (opline->opcode == ZEND_RECV_INIT) { //| LOAD_ZVAL_ADDR Ra(tmp_reg), res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 1665, (tmp_reg), ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 1658, (tmp_reg), (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2375, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1682, (Z_REG(res_addr)), (tmp_reg)); } } else { ZEND_UNREACHABLE(); } #line 12599 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ZVAL_DEREF Ra(tmp_reg), MAY_BE_REF if (MAY_BE_REF & MAY_BE_REF) { dasm_put(Dst, 7204, (tmp_reg), offsetof(zval, u1.v.type), IS_REFERENCE, (tmp_reg), (tmp_reg), 0, (tmp_reg), offsetof(zend_reference, val)); } #line 12600 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" res_addr = ZEND_ADDR_MEM_ZVAL(tmp_reg, 0); } else { //| GET_ZVAL_PTR Ra(tmp_reg), res_addr ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); #line 12603 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" res_addr = ZEND_ADDR_MEM_ZVAL(tmp_reg, offsetof(zend_reference, val)); } } if (type_mask != 0) { if (is_power_of_two(type_mask)) { uint32_t type_code = concrete_type(type_mask); //| IF_NOT_ZVAL_TYPE res_addr, type_code, >1 ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type), type_code); #line 12611 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov edx, 1 //| mov cl, byte [Ra(Z_REG(res_addr))+Z_OFFSET(res_addr)+offsetof(zval, u1.v.type)] //| shl edx, cl //| test edx, type_mask //| je >1 dasm_put(Dst, 7234, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type), type_mask); #line 12617 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.cold_code dasm_put(Dst, 289); #line 12620 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 12621 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" in_cold = 1; } if (Z_REG(res_addr) != ZREG_FCARG1 || Z_OFFSET(res_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2220, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2228, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 12627 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 12630 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| ADDR_STORE aword EX->opline, opline, r0 if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } #line 12632 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ADDR FCARG2a, (ptrdiff_t)arg_info if (IS_SIGNED_32BIT((ptrdiff_t)arg_info)) { dasm_put(Dst, 712, ((ptrdiff_t)(ptrdiff_t)arg_info)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)(ptrdiff_t)arg_info)), (unsigned int)((((ptrdiff_t)(ptrdiff_t)arg_info))>>32)); } #line 12634 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_verify_arg_slow, r0 if (MAY_USE_32BIT_ADDR(zend_jit_verify_arg_slow)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_verify_arg_slow)); } else { if (IS_SIGNED_32BIT(zend_jit_verify_arg_slow)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_verify_arg_slow)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_verify_arg_slow)), (unsigned int)((((ptrdiff_t)zend_jit_verify_arg_slow))>>32)); } dasm_put(Dst, 59); } #line 12635 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (check_exception) { //| test al, al dasm_put(Dst, 5141); #line 12638 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (in_cold) { //| jnz >1 //| jmp ->exception_handler //|.code dasm_put(Dst, 5874); #line 12642 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 12643 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jz ->exception_handler dasm_put(Dst, 5801); #line 12645 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (in_cold) { //| jmp >1 //|.code dasm_put(Dst, 3691); #line 12649 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 12650 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_recv(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array) { uint32_t arg_num = opline->op1.num; zend_arg_info *arg_info = NULL; if (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) { if (EXPECTED(arg_num <= op_array->num_args)) { arg_info = &op_array->arg_info[arg_num-1]; } else if (UNEXPECTED(op_array->fn_flags & ZEND_ACC_VARIADIC)) { arg_info = &op_array->arg_info[op_array->num_args]; } if (arg_info && !ZEND_TYPE_IS_SET(arg_info->type)) { arg_info = NULL; } } if (arg_info || (opline+1)->opcode != ZEND_RECV) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { if (!JIT_G(current_frame) || TRACE_FRAME_NUM_ARGS(JIT_G(current_frame)) < 0 || arg_num > TRACE_FRAME_NUM_ARGS(JIT_G(current_frame))) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| cmp dword EX->This.u2.num_args, arg_num //| jb &exit_addr dasm_put(Dst, 7257, Dt1(->This.u2.num_args), arg_num, (ptrdiff_t)(exit_addr)); #line 12684 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| cmp dword EX->This.u2.num_args, arg_num //| jb >1 //|.cold_code dasm_put(Dst, 7266, Dt1(->This.u2.num_args), arg_num); #line 12689 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 12690 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 12692 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| ADDR_STORE aword EX->opline, opline, r0 if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } #line 12694 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov FCARG1a, FP //| EXT_CALL zend_missing_arg_error, r0 dasm_put(Dst, 66); if (MAY_USE_32BIT_ADDR(zend_missing_arg_error)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_missing_arg_error)); } else { if (IS_SIGNED_32BIT(zend_missing_arg_error)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_missing_arg_error)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_missing_arg_error)), (unsigned int)((((ptrdiff_t)zend_missing_arg_error))>>32)); } dasm_put(Dst, 59); } #line 12697 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->exception_handler //|.code dasm_put(Dst, 5716); #line 12699 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (arg_info) { if (!zend_jit_verify_arg_type(Dst, opline, arg_info, 1)) { return 0; } } if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE) { if ((opline+1)->opcode != ZEND_RECV && (opline+1)->opcode != ZEND_RECV_INIT) { //| LOAD_IP_ADDR (opline + 1) if (GCC_GLOBAL_REGS) { if (IS_SIGNED_32BIT((opline + 1))) { dasm_put(Dst, 501, ((ptrdiff_t)(opline + 1))); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32)); } } else { if (IS_SIGNED_32BIT((opline + 1))) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)(opline + 1))); } else { dasm_put(Dst, 511, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32), Dt1(->opline)); } } #line 12711 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" zend_jit_set_last_valid_opline(opline + 1); } } return 1; } static int zend_jit_recv_init(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, bool is_last, int may_throw) { uint32_t arg_num = opline->op1.num; zval *zv = RT_CONSTANT(opline, opline->op2); zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && JIT_G(current_frame) && TRACE_FRAME_NUM_ARGS(JIT_G(current_frame)) >= 0) { if (arg_num > TRACE_FRAME_NUM_ARGS(JIT_G(current_frame))) { //| ZVAL_COPY_CONST res_addr, -1, -1, zv, ZREG_R0 if (Z_TYPE_P(zv) > IS_TRUE) { if (Z_TYPE_P(zv) == IS_DOUBLE) { zend_reg dst_reg = (Z_MODE(res_addr) == IS_REG) ? Z_REG(res_addr) : ZREG_XMM0; if (Z_DVAL_P(zv) == 0.0 && !is_signed(Z_DVAL_P(zv))) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } else if (!IS_SIGNED_32BIT(zv)) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(((uintptr_t)zv)), (unsigned int)((((uintptr_t)zv))>>32)); if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); } else { dasm_put(Dst, 1907, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); } } else { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); } else { dasm_put(Dst, 1867, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); } } if (Z_MODE(res_addr) == IS_REG) { if (dst_reg != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_TYPE_P(zv) == IS_LONG && -1 == MAY_BE_DOUBLE) { zend_reg dst_reg = (Z_MODE(res_addr) == IS_REG) ? Z_REG(res_addr) : ZREG_XMM0; if (Z_LVAL_P(zv) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(zv)); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (ZREG_R0)); } else { dasm_put(Dst, 2659, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (ZREG_R0)); } } if (Z_MODE(res_addr) == IS_REG) { if (dst_reg != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_LVAL_P(zv) == 0 && Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); } else { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R0), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(zv)); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3768, (Z_REG(res_addr)), Z_OFFSET(res_addr), Z_LVAL_P(zv)); } } } } if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (-1 == MAY_BE_DOUBLE) { if ((-1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != MAY_BE_DOUBLE) { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); } } else if (((-1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (1<<Z_TYPE_P(zv))) || (-1 & (MAY_BE_STRING|MAY_BE_ARRAY)) != 0) { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), Z_TYPE_INFO_P(zv)); } } #line 12729 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REFCOUNTED_P(zv)) { //| ADDREF_CONST zv, r0 if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 6246, (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); } else { dasm_put(Dst, 3792, Z_LVAL_P(zv)); } #line 12731 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else { if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) { //| cmp dword EX->This.u2.num_args, arg_num //| jae >5 dasm_put(Dst, 7277, Dt1(->This.u2.num_args), arg_num); #line 12738 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| ZVAL_COPY_CONST res_addr, -1, -1, zv, ZREG_R0 if (Z_TYPE_P(zv) > IS_TRUE) { if (Z_TYPE_P(zv) == IS_DOUBLE) { zend_reg dst_reg = (Z_MODE(res_addr) == IS_REG) ? Z_REG(res_addr) : ZREG_XMM0; if (Z_DVAL_P(zv) == 0.0 && !is_signed(Z_DVAL_P(zv))) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } else if (!IS_SIGNED_32BIT(zv)) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(((uintptr_t)zv)), (unsigned int)((((uintptr_t)zv))>>32)); if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); } else { dasm_put(Dst, 1907, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); } } else { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); } else { dasm_put(Dst, 1867, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); } } if (Z_MODE(res_addr) == IS_REG) { if (dst_reg != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_TYPE_P(zv) == IS_LONG && -1 == MAY_BE_DOUBLE) { zend_reg dst_reg = (Z_MODE(res_addr) == IS_REG) ? Z_REG(res_addr) : ZREG_XMM0; if (Z_LVAL_P(zv) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(zv)); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (ZREG_R0)); } else { dasm_put(Dst, 2659, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (ZREG_R0)); } } if (Z_MODE(res_addr) == IS_REG) { if (dst_reg != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_LVAL_P(zv) == 0 && Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); } else { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R0), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(zv)); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3768, (Z_REG(res_addr)), Z_OFFSET(res_addr), Z_LVAL_P(zv)); } } } } if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (-1 == MAY_BE_DOUBLE) { if ((-1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != MAY_BE_DOUBLE) { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); } } else if (((-1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (1<<Z_TYPE_P(zv))) || (-1 & (MAY_BE_STRING|MAY_BE_ARRAY)) != 0) { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), Z_TYPE_INFO_P(zv)); } } #line 12740 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REFCOUNTED_P(zv)) { //| ADDREF_CONST zv, r0 if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 6246, (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); } else { dasm_put(Dst, 3792, Z_LVAL_P(zv)); } #line 12742 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (Z_CONSTANT_P(zv)) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 12748 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| ADDR_STORE aword EX->opline, opline, r0 if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } #line 12750 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ZVAL_ADDR FCARG1a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2220, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2228, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 12752 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov r0, EX->func //| mov FCARG2a, [r0 + offsetof(zend_op_array, scope)] //| .if X64 //| EXT_CALL zval_update_constant_ex, r0 dasm_put(Dst, 7287, Dt1(->func), offsetof(zend_op_array, scope)); if (MAY_USE_32BIT_ADDR(zval_update_constant_ex)) { dasm_put(Dst, 46, (ptrdiff_t)(zval_update_constant_ex)); } else { if (IS_SIGNED_32BIT(zval_update_constant_ex)) { dasm_put(Dst, 49, ((ptrdiff_t)zval_update_constant_ex)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zval_update_constant_ex)), (unsigned int)((((ptrdiff_t)zval_update_constant_ex))>>32)); } dasm_put(Dst, 59); } #line 12756 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| .else #line 12758 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zval_jit_update_constant_ex, r0 #line 12760 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zval_update_constant_ex, r0 #line 12762 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| .endif //| test al, al //| jnz >1 //|.cold_code dasm_put(Dst, 7296); #line 12766 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| ZVAL_PTR_DTOR res_addr, MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN, 1, 0, opline dasm_put(Dst, 63); if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(res_addr)), Z_OFFSET(res_addr)); if (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & MAY_BE_GUARD) || RC_MAY_BE_1(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN)) { if (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & MAY_BE_GUARD) || RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN)) { if (1 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & MAY_BE_GUARD) && has_concrete_type((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (1 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (1 && (((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & MAY_BE_GUARD) || (RC_MAY_BE_N(MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } #line 12768 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_UNDEF ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 12769 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->exception_handler //|.code dasm_put(Dst, 7304, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_UNDEF); #line 12771 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|5: dasm_put(Dst, 498); #line 12774 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) { do { zend_arg_info *arg_info; if (arg_num <= op_array->num_args) { arg_info = &op_array->arg_info[arg_num-1]; } else if (op_array->fn_flags & ZEND_ACC_VARIADIC) { arg_info = &op_array->arg_info[op_array->num_args]; } else { break; } if (!ZEND_TYPE_IS_SET(arg_info->type)) { break; } if (!zend_jit_verify_arg_type(Dst, opline, arg_info, may_throw)) { return 0; } } while (0); } if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE) { if (is_last) { //| LOAD_IP_ADDR (opline + 1) if (GCC_GLOBAL_REGS) { if (IS_SIGNED_32BIT((opline + 1))) { dasm_put(Dst, 501, ((ptrdiff_t)(opline + 1))); } else { dasm_put(Dst, 506, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32)); } } else { if (IS_SIGNED_32BIT((opline + 1))) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)(opline + 1))); } else { dasm_put(Dst, 511, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32), Dt1(->opline)); } } #line 12798 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" zend_jit_set_last_valid_opline(opline + 1); } } return 1; } static int zend_jit_class_guard(dasm_State **Dst, const zend_op *opline, zend_class_entry *ce) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //|.if X64 if (!IS_SIGNED_32BIT(ce)) { //| mov64 r0, ((ptrdiff_t)ce) //| cmp aword [FCARG1a + offsetof(zend_object, ce)], r0 dasm_put(Dst, 7318, (unsigned int)(((ptrdiff_t)ce)), (unsigned int)((((ptrdiff_t)ce))>>32), offsetof(zend_object, ce)); } else { #line 12819 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp aword [FCARG1a + offsetof(zend_object, ce)], ce dasm_put(Dst, 7327, offsetof(zend_object, ce), ce); } #line 12821 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| cmp aword [FCARG1a + offsetof(zend_object, ce)], ce //|.endif //| jne &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 12825 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_fetch_obj(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, zend_ssa *ssa, const zend_ssa_op *ssa_op, uint32_t op1_info, zend_jit_addr op1_addr, bool op1_indirect, zend_class_entry *ce, bool ce_is_instanceof, bool on_this, bool delayed_fetch_this, bool op1_avoid_refcounting, zend_class_entry *trace_ce, uint8_t prop_type, int may_throw) { zval *member; zend_property_info *prop_info; bool may_be_dynamic = 1; zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); zend_jit_addr this_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, offsetof(zend_execute_data, This)); zend_jit_addr prop_addr; uint32_t res_info = RES_INFO(); bool type_loaded = 0; ZEND_ASSERT(opline->op2_type == IS_CONST); ZEND_ASSERT(op1_info & MAY_BE_OBJECT); member = RT_CONSTANT(opline, opline->op2); ZEND_ASSERT(Z_TYPE_P(member) == IS_STRING && Z_STRVAL_P(member)[0] != '\0'); prop_info = zend_get_known_property_info(op_array, ce, Z_STR_P(member), on_this, op_array->filename); if (on_this) { //| GET_ZVAL_PTR FCARG1a, this_addr ZEND_ASSERT(Z_MODE(this_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(this_addr)), Z_OFFSET(this_addr)); #line 12864 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (opline->op1_type == IS_VAR && opline->opcode == ZEND_FETCH_OBJ_W && (op1_info & MAY_BE_INDIRECT) && Z_REG(op1_addr) == ZREG_FP) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 12870 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_NOT_Z_TYPE FCARG1a, IS_INDIRECT, >1 //| GET_Z_PTR FCARG1a, FCARG1a //|1: dasm_put(Dst, 7333, offsetof(zval, u1.v.type), IS_INDIRECT); #line 12873 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } if (op1_info & MAY_BE_REF) { if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 12878 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| ZVAL_DEREF FCARG1a, op1_info if (op1_info & MAY_BE_REF) { dasm_put(Dst, 5095, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 12880 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } if (op1_info & ((MAY_BE_UNDEF|MAY_BE_ANY)- MAY_BE_OBJECT)) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_NOT_ZVAL_TYPE op1_addr, IS_OBJECT, &exit_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT, (ptrdiff_t)(exit_addr)); #line 12891 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_OBJECT, >7 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4217, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT); #line 12893 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| GET_ZVAL_PTR FCARG1a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 12896 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!prop_info && trace_ce && (trace_ce->ce_flags & ZEND_ACC_IMMUTABLE)) { prop_info = zend_get_known_property_info(op_array, trace_ce, Z_STR_P(member), on_this, op_array->filename); if (prop_info) { ce = trace_ce; ce_is_instanceof = 0; if (!(op1_info & MAY_BE_CLASS_GUARD)) { if (on_this && JIT_G(current_frame) && TRACE_FRAME_IS_THIS_CLASS_CHECKED(JIT_G(current_frame))) { ZEND_ASSERT(JIT_G(current_frame)->ce == ce); } else if (zend_jit_class_guard(Dst, opline, ce)) { if (on_this && JIT_G(current_frame)) { JIT_G(current_frame)->ce = ce; TRACE_FRAME_SET_THIS_CLASS_CHECKED(JIT_G(current_frame)); } } else { return 0; } if (ssa->var_info && ssa_op->op1_use >= 0) { ssa->var_info[ssa_op->op1_use].type |= MAY_BE_CLASS_GUARD; ssa->var_info[ssa_op->op1_use].ce = ce; ssa->var_info[ssa_op->op1_use].is_instanceof = ce_is_instanceof; } } } } if (!prop_info) { //| mov r0, EX->run_time_cache //| mov r2, aword [r0 + (opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS)] //| cmp r2, aword [FCARG1a + offsetof(zend_object, ce)] //| jne >5 //| mov r0, aword [r0 + (opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) + sizeof(void*)] dasm_put(Dst, 7347, Dt1(->run_time_cache), (opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS), offsetof(zend_object, ce), (opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) + sizeof(void*)); #line 12930 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" may_be_dynamic = zend_may_be_dynamic_property(ce, Z_STR_P(member), opline->op1_type == IS_UNUSED, op_array->filename); if (may_be_dynamic) { //| test r0, r0 dasm_put(Dst, 3529); #line 12933 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode == ZEND_FETCH_OBJ_W) { //| jl >5 dasm_put(Dst, 7368); #line 12935 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jl >8 // dynamic property dasm_put(Dst, 7373); #line 12937 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| mov edx, dword [FCARG1a + r0 + 8] //| IF_UNDEF dl, >5 //| add FCARG1a, r0 dasm_put(Dst, 7378, 8); #line 12942 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" type_loaded = 1; prop_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); if (opline->opcode == ZEND_FETCH_OBJ_W && (!ce || ce_is_instanceof || (ce->ce_flags & (ZEND_ACC_HAS_TYPE_HINTS|ZEND_ACC_TRAIT)))) { uint32_t flags = opline->extended_value & ZEND_FETCH_OBJ_FLAGS; //| mov r0, EX->run_time_cache //| mov FCARG2a, aword [r0 + (opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) + sizeof(void*) * 2] //| test FCARG2a, FCARG2a //| jnz >1 //|.cold_code dasm_put(Dst, 7393, Dt1(->run_time_cache), (opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) + sizeof(void*) * 2); #line 12953 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| test dword [FCARG2a + offsetof(zend_property_info, flags)], ZEND_ACC_READONLY dasm_put(Dst, 7411, offsetof(zend_property_info, flags), ZEND_ACC_READONLY); #line 12955 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (flags) { //| jz >3 dasm_put(Dst, 3901); #line 12957 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jz >4 dasm_put(Dst, 300); #line 12959 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| IF_NOT_Z_TYPE FCARG1a, IS_OBJECT, >2 //| GET_Z_PTR r0, FCARG1a //| GC_ADDREF r0 //| SET_ZVAL_PTR res_addr, r0 dasm_put(Dst, 7419, offsetof(zval, u1.v.type), IS_OBJECT); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 12964 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_OBJECT_EX dasm_put(Dst, 2191, (Z_REG(res_addr)), Z_OFFSET(res_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 12965 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >9 //|2: //| mov FCARG1a, FCARG2a //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 7434, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_OBJECT_EX); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 12969 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_readonly_property_modification_error, r0 if (MAY_USE_32BIT_ADDR(zend_readonly_property_modification_error)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_readonly_property_modification_error)); } else { if (IS_SIGNED_32BIT(zend_readonly_property_modification_error)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_readonly_property_modification_error)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_readonly_property_modification_error)), (unsigned int)((((ptrdiff_t)zend_readonly_property_modification_error))>>32)); } dasm_put(Dst, 59); } #line 12970 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, _IS_ERROR ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 12971 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >9 //|3: dasm_put(Dst, 7453, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), _IS_ERROR); #line 12973 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (flags == ZEND_FETCH_DIM_WRITE) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 12975 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_check_array_promotion, r0 if (MAY_USE_32BIT_ADDR(zend_jit_check_array_promotion)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_check_array_promotion)); } else { if (IS_SIGNED_32BIT(zend_jit_check_array_promotion)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_check_array_promotion)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_check_array_promotion)), (unsigned int)((((ptrdiff_t)zend_jit_check_array_promotion))>>32)); } dasm_put(Dst, 59); } #line 12976 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >9 dasm_put(Dst, 3591); #line 12977 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (flags == ZEND_FETCH_REF) { //|.if X64 //| LOAD_ZVAL_ADDR CARG3, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 3303, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 3311, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 12980 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ZVAL_ADDR res_addr, r0 //|.endif //| EXT_CALL zend_jit_create_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_create_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_create_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_create_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_create_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_create_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_create_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 12985 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) //| add r4, 12 //|.endif //| jmp >9 dasm_put(Dst, 3591); #line 12989 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_ASSERT(flags == 0); } //|.code dasm_put(Dst, 386); #line 12993 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|4: dasm_put(Dst, 388); #line 12994 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { prop_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, prop_info->offset); if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { if (opline->opcode == ZEND_FETCH_OBJ_W || !(res_info & MAY_BE_GUARD) || !JIT_G(current_frame)) { /* perform IS_UNDEF check only after result type guard (during deoptimization) */ int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } type_loaded = 1; //| mov edx, dword [FCARG1a + prop_info->offset + 8] //| IF_UNDEF dl, &exit_addr dasm_put(Dst, 7468, prop_info->offset + 8, (ptrdiff_t)(exit_addr)); #line 13009 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { type_loaded = 1; //| mov edx, dword [FCARG1a + prop_info->offset + 8] //| IF_UNDEF dl, >5 dasm_put(Dst, 7477, prop_info->offset + 8); #line 13014 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode == ZEND_FETCH_OBJ_W && (prop_info->flags & ZEND_ACC_READONLY)) { if (!type_loaded) { type_loaded = 1; //| mov edx, dword [FCARG1a + prop_info->offset + 8] dasm_put(Dst, 7487, prop_info->offset + 8); #line 13019 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| IF_NOT_TYPE dl, IS_OBJECT, >4 //| GET_ZVAL_PTR r0, prop_addr dasm_put(Dst, 7491, IS_OBJECT); ZEND_ASSERT(Z_MODE(prop_addr) == IS_MEM_ZVAL); #line 13022 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_ADDREF r0 //| SET_ZVAL_PTR res_addr, r0 dasm_put(Dst, 7500, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 13024 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_OBJECT_EX dasm_put(Dst, 2191, (Z_REG(res_addr)), Z_OFFSET(res_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 13025 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >9 //|.cold_code dasm_put(Dst, 7511, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_OBJECT_EX); #line 13027 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|4: //| LOAD_ADDR FCARG1a, prop_info dasm_put(Dst, 388); if (IS_SIGNED_32BIT(prop_info)) { dasm_put(Dst, 759, ((ptrdiff_t)prop_info)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)prop_info)), (unsigned int)((((ptrdiff_t)prop_info))>>32)); } #line 13029 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 13030 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_readonly_property_modification_error, r0 if (MAY_USE_32BIT_ADDR(zend_readonly_property_modification_error)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_readonly_property_modification_error)); } else { if (IS_SIGNED_32BIT(zend_readonly_property_modification_error)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_readonly_property_modification_error)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_readonly_property_modification_error)), (unsigned int)((((ptrdiff_t)zend_readonly_property_modification_error))>>32)); } dasm_put(Dst, 59); } #line 13031 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, _IS_ERROR ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 13032 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >9 //|.code dasm_put(Dst, 7525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), _IS_ERROR); #line 13034 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode == ZEND_FETCH_OBJ_W && (opline->extended_value & ZEND_FETCH_OBJ_FLAGS) && ZEND_TYPE_IS_SET(prop_info->type)) { uint32_t flags = opline->extended_value & ZEND_FETCH_OBJ_FLAGS; if (flags == ZEND_FETCH_DIM_WRITE) { if ((ZEND_TYPE_FULL_MASK(prop_info->type) & MAY_BE_ARRAY) == 0) { if (!type_loaded) { type_loaded = 1; //| mov edx, dword [FCARG1a + prop_info->offset + 8] dasm_put(Dst, 7487, prop_info->offset + 8); #line 13045 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| cmp dl, IS_FALSE //| jle >1 //|.cold_code dasm_put(Dst, 7539, IS_FALSE); #line 13049 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 13050 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(prop_addr) != ZREG_FCARG1 || Z_OFFSET(prop_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, prop_addr if (Z_MODE(prop_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(prop_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(prop_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(prop_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(prop_addr)))>>32)); } } else if (Z_MODE(prop_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(prop_addr)) { dasm_put(Dst, 2220, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); } else { dasm_put(Dst, 2228, (Z_REG(prop_addr))); } } else { ZEND_UNREACHABLE(); } #line 13052 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ADDR FCARG2a, prop_info if (IS_SIGNED_32BIT(prop_info)) { dasm_put(Dst, 712, ((ptrdiff_t)prop_info)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)prop_info)), (unsigned int)((((ptrdiff_t)prop_info))>>32)); } #line 13054 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 13055 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_check_array_promotion, r0 if (MAY_USE_32BIT_ADDR(zend_jit_check_array_promotion)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_check_array_promotion)); } else { if (IS_SIGNED_32BIT(zend_jit_check_array_promotion)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_check_array_promotion)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_check_array_promotion)), (unsigned int)((((ptrdiff_t)zend_jit_check_array_promotion))>>32)); } dasm_put(Dst, 59); } #line 13056 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >9 //|.code dasm_put(Dst, 4046); #line 13058 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (flags == ZEND_FETCH_REF) { if (!type_loaded) { type_loaded = 1; //| mov edx, dword [FCARG1a + prop_info->offset + 8] dasm_put(Dst, 7487, prop_info->offset + 8); #line 13063 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| IF_TYPE dl, IS_REFERENCE, >1 dasm_put(Dst, 7549, IS_REFERENCE); #line 13065 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (ce && ce->ce_flags & ZEND_ACC_IMMUTABLE) { //| LOAD_ADDR FCARG2a, prop_info if (IS_SIGNED_32BIT(prop_info)) { dasm_put(Dst, 712, ((ptrdiff_t)prop_info)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)prop_info)), (unsigned int)((((ptrdiff_t)prop_info))>>32)); } #line 13067 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { int prop_info_offset = (((prop_info->offset - (sizeof(zend_object) - sizeof(zval))) / sizeof(zval)) * sizeof(void*)); //| mov r0, aword [FCARG1a + offsetof(zend_object, ce)] //| mov r0, aword [r0 + offsetof(zend_class_entry, properties_info_table)] //| mov FCARG2a, aword[r0 + prop_info_offset] dasm_put(Dst, 7558, offsetof(zend_object, ce), offsetof(zend_class_entry, properties_info_table), prop_info_offset); #line 13074 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_REG(prop_addr) != ZREG_FCARG1 || Z_OFFSET(prop_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, prop_addr if (Z_MODE(prop_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(prop_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(prop_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(prop_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(prop_addr)))>>32)); } } else if (Z_MODE(prop_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(prop_addr)) { dasm_put(Dst, 2220, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); } else { dasm_put(Dst, 2228, (Z_REG(prop_addr))); } } else { ZEND_UNREACHABLE(); } #line 13077 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if X64 //| LOAD_ZVAL_ADDR CARG3, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 3303, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 3311, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 13080 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ZVAL_ADDR res_addr, r0 //|.endif //| EXT_CALL zend_jit_create_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_create_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_create_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_create_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_create_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_create_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_create_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 13085 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) //| add r4, 12 //|.endif //| jmp >9 //|1: dasm_put(Dst, 7571); #line 13090 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } } } if (opline->opcode == ZEND_FETCH_OBJ_W) { if (Z_REG(prop_addr) != ZREG_FCARG1 || Z_OFFSET(prop_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, prop_addr if (Z_MODE(prop_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(prop_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(prop_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(prop_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(prop_addr)))>>32)); } } else if (Z_MODE(prop_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(prop_addr)) { dasm_put(Dst, 2220, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); } else { dasm_put(Dst, 2228, (Z_REG(prop_addr))); } } else { ZEND_UNREACHABLE(); } #line 13098 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_ZVAL_PTR res_addr, FCARG1a ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 13100 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_INDIRECT dasm_put(Dst, 7578, (Z_REG(res_addr)), Z_OFFSET(res_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_INDIRECT); #line 13101 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && prop_info) { ssa->var_info[ssa_op->result_def].indirect_reference = 1; } } else { bool result_avoid_refcounting = 0; if ((res_info & MAY_BE_GUARD) && JIT_G(current_frame) && prop_info) { uint32_t flags = 0; uint32_t old_info; zend_jit_trace_stack *stack = JIT_G(current_frame)->stack; int32_t exit_point; const void *exit_addr; zend_uchar type; zend_jit_addr val_addr = prop_addr; if ((opline->op1_type & (IS_VAR|IS_TMP_VAR)) && !delayed_fetch_this && !op1_avoid_refcounting) { flags = ZEND_JIT_EXIT_FREE_OP1; } if ((opline->result_type & (IS_VAR|IS_TMP_VAR)) && !(flags & ZEND_JIT_EXIT_FREE_OP1) && (res_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) && (ssa_op+1)->op1_use == ssa_op->result_def && zend_jit_may_avoid_refcounting(opline+1, res_info)) { result_avoid_refcounting = 1; ssa->var_info[ssa_op->result_def].avoid_refcounting = 1; } type = concrete_type(res_info); if (prop_type != IS_UNKNOWN && prop_type != IS_UNDEF && prop_type != IS_REFERENCE && (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_OBJECT) { exit_point = zend_jit_trace_get_exit_point(opline, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } } else { val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0); //| LOAD_ZVAL_ADDR r0, prop_addr if (Z_MODE(prop_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(prop_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(prop_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(prop_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(prop_addr)))>>32)); } } else if (Z_MODE(prop_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(prop_addr)) { dasm_put(Dst, 6282, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); } else { dasm_put(Dst, 6290, (Z_REG(prop_addr))); } } else { ZEND_UNREACHABLE(); } #line 13145 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_avoid_refcounting) { SET_STACK_REG(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(opline->op1.var), ZREG_NONE); } old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_COPY_GPR0); exit_point = zend_jit_trace_get_exit_point(opline+1, flags); SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } if (!type_loaded) { type_loaded = 1; //| mov edx, dword [FCARG1a + prop_info->offset + 8] dasm_put(Dst, 7487, prop_info->offset + 8); #line 13162 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // ZVAL_DEREF() //| IF_NOT_TYPE dl, IS_REFERENCE, >1 //| GET_Z_PTR r0, r0 //| add r0, offsetof(zend_reference, val) //| GET_ZVAL_TYPE_INFO edx, val_addr dasm_put(Dst, 7586, IS_REFERENCE, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 7602, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info)); #line 13168 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } res_info &= ~MAY_BE_GUARD; ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; if (type < IS_STRING) { //|1: dasm_put(Dst, 63); #line 13173 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (type_loaded) { //| IF_NOT_TYPE dl, type, &exit_addr dasm_put(Dst, 7039, type, (ptrdiff_t)(exit_addr)); #line 13175 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE val_addr, type, &exit_addr ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), type, (ptrdiff_t)(exit_addr)); #line 13177 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (!type_loaded) { type_loaded = 1; //| GET_ZVAL_TYPE_INFO edx, val_addr ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 7602, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info)); #line 13182 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|1: //| IF_NOT_TYPE dl, type, &exit_addr dasm_put(Dst, 7610, type, (ptrdiff_t)(exit_addr)); #line 13185 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // ZVAL_COPY //| ZVAL_COPY_VALUE_V res_addr, -1, val_addr, res_info, ZREG_R0, ZREG_R1 if (res_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((res_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(val_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(val_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R1), (ZREG_R1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (ZREG_R1), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R1), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (ZREG_R1 != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (ZREG_R1)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R1), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((res_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(val_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(val_addr) != IS_REG || Z_REG(res_addr) != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(val_addr) != IS_REG || ZREG_XMM0 != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(res_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } #line 13188 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (type < IS_STRING) { if (Z_REG(res_addr) != ZREG_FP || JIT_G(current_frame) == NULL || STACK_MEM_TYPE(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(Z_OFFSET(res_addr))) != type) { //| SET_ZVAL_TYPE_INFO res_addr, type ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); #line 13193 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| SET_ZVAL_TYPE_INFO res_addr, edx ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 6919, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 13196 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!result_avoid_refcounting) { //| TRY_ADDREF res_info, dh, r1 if (res_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (res_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 3981); } dasm_put(Dst, 2078); } #line 13198 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else { if (!zend_jit_zval_copy_deref(Dst, res_addr, prop_addr, ZREG_R2)) { return 0; } } } if (op1_avoid_refcounting) { SET_STACK_REG(JIT_G(current_frame)->stack, EX_VAR_TO_NUM(opline->op1.var), ZREG_NONE); } //|.cold_code dasm_put(Dst, 289); #line 13213 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE || !prop_info) { //|5: //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 498); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 13217 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode == ZEND_FETCH_OBJ_W) { //| EXT_CALL zend_jit_fetch_obj_w_slow, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_obj_w_slow)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_obj_w_slow)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_obj_w_slow)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_obj_w_slow)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_obj_w_slow)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_obj_w_slow))>>32)); } dasm_put(Dst, 59); } #line 13219 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (opline->opcode != ZEND_FETCH_OBJ_IS) { //| EXT_CALL zend_jit_fetch_obj_r_slow, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_obj_r_slow)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_obj_r_slow)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_obj_r_slow)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_obj_r_slow)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_obj_r_slow)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_obj_r_slow))>>32)); } dasm_put(Dst, 59); } #line 13221 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_fetch_obj_is_slow, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_obj_is_slow)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_obj_is_slow)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_obj_is_slow)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_obj_is_slow)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_obj_is_slow)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_obj_is_slow))>>32)); } dasm_put(Dst, 59); } #line 13223 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jmp >9 dasm_put(Dst, 3591); #line 13225 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if ((op1_info & ((MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)- MAY_BE_OBJECT)) && JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE) { //|7: dasm_put(Dst, 4315); #line 13229 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode != ZEND_FETCH_OBJ_IS) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 13231 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode != ZEND_FETCH_OBJ_W && (op1_info & MAY_BE_UNDEF)) { zend_jit_addr orig_op1_addr = OP1_ADDR(); if (op1_info & MAY_BE_ANY) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_UNDEF, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); #line 13237 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov FCARG1d, opline->op1.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 2217, opline->op1.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 13240 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| LOAD_ZVAL_ADDR FCARG1a, orig_op1_addr dasm_put(Dst, 63); if (Z_MODE(orig_op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(orig_op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(orig_op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(orig_op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(orig_op1_addr)))>>32)); } } else if (Z_MODE(orig_op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(orig_op1_addr)) { dasm_put(Dst, 2220, (Z_REG(orig_op1_addr)), Z_OFFSET(orig_op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(orig_op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 13242 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 13244 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ADDR FCARG2a, Z_STRVAL_P(member) if (IS_SIGNED_32BIT(Z_STRVAL_P(member))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_STRVAL_P(member))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_STRVAL_P(member))), (unsigned int)((((ptrdiff_t)Z_STRVAL_P(member)))>>32)); } #line 13246 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode == ZEND_FETCH_OBJ_W) { //| EXT_CALL zend_jit_invalid_property_write, r0 if (MAY_USE_32BIT_ADDR(zend_jit_invalid_property_write)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_invalid_property_write)); } else { if (IS_SIGNED_32BIT(zend_jit_invalid_property_write)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_invalid_property_write)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_invalid_property_write)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_property_write))>>32)); } dasm_put(Dst, 59); } #line 13248 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, _IS_ERROR ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), _IS_ERROR); #line 13249 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_invalid_property_read, r0 if (MAY_USE_32BIT_ADDR(zend_jit_invalid_property_read)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_invalid_property_read)); } else { if (IS_SIGNED_32BIT(zend_jit_invalid_property_read)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_invalid_property_read)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_invalid_property_read)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_property_read))>>32)); } dasm_put(Dst, 59); } #line 13251 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_NULL ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); #line 13252 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jmp >9 dasm_put(Dst, 3591); #line 13254 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| SET_ZVAL_TYPE_INFO res_addr, IS_NULL ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 13256 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >9 dasm_put(Dst, 3649, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); #line 13257 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!prop_info && may_be_dynamic && opline->opcode != ZEND_FETCH_OBJ_W) { //|8: //| mov FCARG2a, r0 //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 7620); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 13266 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode != ZEND_FETCH_OBJ_IS) { //| EXT_CALL zend_jit_fetch_obj_r_dynamic, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_obj_r_dynamic)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_obj_r_dynamic)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_obj_r_dynamic)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_obj_r_dynamic)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_obj_r_dynamic)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_obj_r_dynamic))>>32)); } dasm_put(Dst, 59); } #line 13268 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_fetch_obj_is_dynamic, r0 if (MAY_USE_32BIT_ADDR(zend_jit_fetch_obj_is_dynamic)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_fetch_obj_is_dynamic)); } else { if (IS_SIGNED_32BIT(zend_jit_fetch_obj_is_dynamic)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_fetch_obj_is_dynamic)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_fetch_obj_is_dynamic)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_obj_is_dynamic))>>32)); } dasm_put(Dst, 59); } #line 13270 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jmp >9 dasm_put(Dst, 3591); #line 13272 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code; dasm_put(Dst, 386); #line 13275 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|9: // END dasm_put(Dst, 4072); #line 13276 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op1_type != IS_UNUSED && !delayed_fetch_this && !op1_indirect) { if (opline->op1_type == IS_VAR && opline->opcode == ZEND_FETCH_OBJ_W && (op1_info & MAY_BE_RC1)) { zend_jit_addr orig_op1_addr = OP1_ADDR(); //| IF_NOT_ZVAL_REFCOUNTED orig_op1_addr, >1 ZEND_ASSERT(Z_MODE(orig_op1_addr) == IS_MEM_ZVAL); #line 13283 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_PTR FCARG1a, orig_op1_addr dasm_put(Dst, 2057, (Z_REG(orig_op1_addr)), Z_OFFSET(orig_op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); ZEND_ASSERT(Z_MODE(orig_op1_addr) == IS_MEM_ZVAL); #line 13284 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_DELREF FCARG1a //| jnz >1 //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 7626, (Z_REG(orig_op1_addr)), Z_OFFSET(orig_op1_addr)); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 13287 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_extract_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_extract_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_extract_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_extract_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_extract_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_extract_helper)), (unsigned int)((((ptrdiff_t)zend_jit_extract_helper))>>32)); } dasm_put(Dst, 59); } #line 13288 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 13289 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (!op1_avoid_refcounting) { if (on_this) { op1_info &= ~MAY_BE_RC1; } //| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 13294 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && prop_info && (opline->opcode != ZEND_FETCH_OBJ_W || !(opline->extended_value & ZEND_FETCH_OBJ_FLAGS) || !ZEND_TYPE_IS_SET(prop_info->type)) && (!(opline->op1_type & (IS_VAR|IS_TMP_VAR)) || on_this || op1_indirect)) { may_throw = 0; } if (may_throw) { if (!zend_jit_check_exception(Dst)) { return 0; } } return 1; } static int zend_jit_incdec_obj(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, zend_ssa *ssa, const zend_ssa_op *ssa_op, uint32_t op1_info, zend_jit_addr op1_addr, bool op1_indirect, zend_class_entry *ce, bool ce_is_instanceof, bool on_this, bool delayed_fetch_this, zend_class_entry *trace_ce, uint8_t prop_type) { zval *member; zend_string *name; zend_property_info *prop_info; zend_jit_addr this_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, offsetof(zend_execute_data, This)); zend_jit_addr res_addr = 0; zend_jit_addr prop_addr; bool needs_slow_path = 0; bool use_prop_guard = 0; bool may_throw = 0; uint32_t res_info = (opline->result_type != IS_UNDEF) ? RES_INFO() : 0; ZEND_ASSERT(opline->op2_type == IS_CONST); ZEND_ASSERT(op1_info & MAY_BE_OBJECT); if (opline->result_type != IS_UNUSED) { res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); } member = RT_CONSTANT(opline, opline->op2); ZEND_ASSERT(Z_TYPE_P(member) == IS_STRING && Z_STRVAL_P(member)[0] != '\0'); name = Z_STR_P(member); prop_info = zend_get_known_property_info(op_array, ce, name, on_this, op_array->filename); if (on_this) { //| GET_ZVAL_PTR FCARG1a, this_addr ZEND_ASSERT(Z_MODE(this_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(this_addr)), Z_OFFSET(this_addr)); #line 13355 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (opline->op1_type == IS_VAR && (op1_info & MAY_BE_INDIRECT) && Z_REG(op1_addr) == ZREG_FP) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 13360 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_NOT_Z_TYPE FCARG1a, IS_INDIRECT, >1 //| GET_Z_PTR FCARG1a, FCARG1a //|1: dasm_put(Dst, 7333, offsetof(zval, u1.v.type), IS_INDIRECT); #line 13363 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } if (op1_info & MAY_BE_REF) { if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 13368 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| ZVAL_DEREF FCARG1a, op1_info if (op1_info & MAY_BE_REF) { dasm_put(Dst, 5095, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 13370 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } if (op1_info & ((MAY_BE_UNDEF|MAY_BE_ANY)- MAY_BE_OBJECT)) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_NOT_ZVAL_TYPE op1_addr, IS_OBJECT, &exit_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT, (ptrdiff_t)(exit_addr)); #line 13381 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_OBJECT, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 13383 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 3265, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT); #line 13384 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 63); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 13386 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 13388 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ADDR FCARG2a, ZSTR_VAL(name) if (IS_SIGNED_32BIT(ZSTR_VAL(name))) { dasm_put(Dst, 712, ((ptrdiff_t)ZSTR_VAL(name))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)ZSTR_VAL(name))), (unsigned int)((((ptrdiff_t)ZSTR_VAL(name)))>>32)); } #line 13390 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_invalid_property_incdec, r0 if (MAY_USE_32BIT_ADDR(zend_jit_invalid_property_incdec)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_invalid_property_incdec)); } else { if (IS_SIGNED_32BIT(zend_jit_invalid_property_incdec)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_invalid_property_incdec)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_invalid_property_incdec)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_property_incdec))>>32)); } dasm_put(Dst, 59); } #line 13391 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->exception_handler //|.code dasm_put(Dst, 5716); #line 13393 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| GET_ZVAL_PTR FCARG1a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 13396 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!prop_info && trace_ce && (trace_ce->ce_flags & ZEND_ACC_IMMUTABLE)) { prop_info = zend_get_known_property_info(op_array, trace_ce, name, on_this, op_array->filename); if (prop_info) { ce = trace_ce; ce_is_instanceof = 0; if (!(op1_info & MAY_BE_CLASS_GUARD)) { if (on_this && JIT_G(current_frame) && TRACE_FRAME_IS_THIS_CLASS_CHECKED(JIT_G(current_frame))) { ZEND_ASSERT(JIT_G(current_frame)->ce == ce); } else if (zend_jit_class_guard(Dst, opline, ce)) { if (on_this && JIT_G(current_frame)) { JIT_G(current_frame)->ce = ce; TRACE_FRAME_SET_THIS_CLASS_CHECKED(JIT_G(current_frame)); } } else { return 0; } if (ssa->var_info && ssa_op->op1_use >= 0) { ssa->var_info[ssa_op->op1_use].type |= MAY_BE_CLASS_GUARD; ssa->var_info[ssa_op->op1_use].ce = ce; ssa->var_info[ssa_op->op1_use].is_instanceof = ce_is_instanceof; } if (ssa->var_info && ssa_op->op1_def >= 0) { ssa->var_info[ssa_op->op1_def].type |= MAY_BE_CLASS_GUARD; ssa->var_info[ssa_op->op1_def].ce = ce; ssa->var_info[ssa_op->op1_def].is_instanceof = ce_is_instanceof; } } } } use_prop_guard = (prop_type != IS_UNKNOWN && prop_type != IS_UNDEF && prop_type != IS_REFERENCE && (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_OBJECT); if (!prop_info) { needs_slow_path = 1; //| mov r0, EX->run_time_cache //| mov r2, aword [r0 + opline->extended_value] //| cmp r2, aword [FCARG1a + offsetof(zend_object, ce)] //| jne >7 dasm_put(Dst, 7641, Dt1(->run_time_cache), opline->extended_value, offsetof(zend_object, ce)); #line 13441 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!ce || ce_is_instanceof || (ce->ce_flags & (ZEND_ACC_HAS_TYPE_HINTS|ZEND_ACC_TRAIT))) { //| cmp aword [r0 + opline->extended_value + sizeof(void*) * 2], 0 //| jnz >7 dasm_put(Dst, 7658, opline->extended_value + sizeof(void*) * 2); #line 13444 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov r0, aword [r0 + opline->extended_value + sizeof(void*)] //| test r0, r0 //| jl >7 dasm_put(Dst, 7668, opline->extended_value + sizeof(void*)); #line 13448 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!use_prop_guard) { //| IF_TYPE byte [FCARG1a + r0 + 8], IS_UNDEF, >7 dasm_put(Dst, 7680, 8, IS_UNDEF); #line 13450 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| add FCARG1a, r0 dasm_put(Dst, 7389); #line 13452 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" prop_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } else { prop_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, prop_info->offset); if (ZEND_TYPE_IS_SET(prop_info->type) || !use_prop_guard) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_TYPE byte [FCARG1a + prop_info->offset + 8], IS_UNDEF, &exit_addr dasm_put(Dst, 7691, prop_info->offset + 8, IS_UNDEF, (ptrdiff_t)(exit_addr)); #line 13464 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_TYPE byte [FCARG1a + prop_info->offset + 8], IS_UNDEF, >7 dasm_put(Dst, 7699, prop_info->offset + 8, IS_UNDEF); #line 13466 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" needs_slow_path = 1; } } if (ZEND_TYPE_IS_SET(prop_info->type)) { may_throw = 1; //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 13472 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (ce && ce->ce_flags & ZEND_ACC_IMMUTABLE) { //| LOAD_ADDR FCARG2a, prop_info if (IS_SIGNED_32BIT(prop_info)) { dasm_put(Dst, 712, ((ptrdiff_t)prop_info)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)prop_info)), (unsigned int)((((ptrdiff_t)prop_info))>>32)); } #line 13474 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { int prop_info_offset = (((prop_info->offset - (sizeof(zend_object) - sizeof(zval))) / sizeof(zval)) * sizeof(void*)); //| mov r0, aword [FCARG1a + offsetof(zend_object, ce)] //| mov r0, aword [r0 + offsetof(zend_class_entry, properties_info_table)] //| mov FCARG2a, aword[r0 + prop_info_offset] dasm_put(Dst, 7558, offsetof(zend_object, ce), offsetof(zend_class_entry, properties_info_table), prop_info_offset); #line 13481 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ZVAL_ADDR FCARG1a, prop_addr if (Z_MODE(prop_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(prop_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(prop_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(prop_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(prop_addr)))>>32)); } } else if (Z_MODE(prop_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(prop_addr)) { dasm_put(Dst, 2220, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); } else { dasm_put(Dst, 2228, (Z_REG(prop_addr))); } } else { ZEND_UNREACHABLE(); } #line 13483 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->result_type == IS_UNUSED) { switch (opline->opcode) { case ZEND_PRE_INC_OBJ: case ZEND_POST_INC_OBJ: //| EXT_CALL zend_jit_inc_typed_prop, r0 if (MAY_USE_32BIT_ADDR(zend_jit_inc_typed_prop)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_inc_typed_prop)); } else { if (IS_SIGNED_32BIT(zend_jit_inc_typed_prop)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_inc_typed_prop)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_inc_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_inc_typed_prop))>>32)); } dasm_put(Dst, 59); } #line 13488 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_PRE_DEC_OBJ: case ZEND_POST_DEC_OBJ: //| EXT_CALL zend_jit_dec_typed_prop, r0 if (MAY_USE_32BIT_ADDR(zend_jit_dec_typed_prop)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_dec_typed_prop)); } else { if (IS_SIGNED_32BIT(zend_jit_dec_typed_prop)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_dec_typed_prop)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_dec_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_dec_typed_prop))>>32)); } dasm_put(Dst, 59); } #line 13492 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; default: ZEND_UNREACHABLE(); } } else { //|.if X64 //| LOAD_ZVAL_ADDR CARG3, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 3303, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 3311, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 13499 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ZVAL_ADDR res_addr, r0 //|.endif switch (opline->opcode) { case ZEND_PRE_INC_OBJ: //| EXT_CALL zend_jit_pre_inc_typed_prop, r0 if (MAY_USE_32BIT_ADDR(zend_jit_pre_inc_typed_prop)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_pre_inc_typed_prop)); } else { if (IS_SIGNED_32BIT(zend_jit_pre_inc_typed_prop)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_pre_inc_typed_prop)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_pre_inc_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_pre_inc_typed_prop))>>32)); } dasm_put(Dst, 59); } #line 13506 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_PRE_DEC_OBJ: //| EXT_CALL zend_jit_pre_dec_typed_prop, r0 if (MAY_USE_32BIT_ADDR(zend_jit_pre_dec_typed_prop)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_pre_dec_typed_prop)); } else { if (IS_SIGNED_32BIT(zend_jit_pre_dec_typed_prop)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_pre_dec_typed_prop)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_pre_dec_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_pre_dec_typed_prop))>>32)); } dasm_put(Dst, 59); } #line 13509 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_POST_INC_OBJ: //| EXT_CALL zend_jit_post_inc_typed_prop, r0 if (MAY_USE_32BIT_ADDR(zend_jit_post_inc_typed_prop)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_post_inc_typed_prop)); } else { if (IS_SIGNED_32BIT(zend_jit_post_inc_typed_prop)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_post_inc_typed_prop)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_post_inc_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_post_inc_typed_prop))>>32)); } dasm_put(Dst, 59); } #line 13512 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_POST_DEC_OBJ: //| EXT_CALL zend_jit_post_dec_typed_prop, r0 if (MAY_USE_32BIT_ADDR(zend_jit_post_dec_typed_prop)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_post_dec_typed_prop)); } else { if (IS_SIGNED_32BIT(zend_jit_post_dec_typed_prop)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_post_dec_typed_prop)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_post_dec_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_post_dec_typed_prop))>>32)); } dasm_put(Dst, 59); } #line 13515 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; default: ZEND_UNREACHABLE(); } //|.if not(X64) //| add r4, 12 //|.endif } } } if (!prop_info || !ZEND_TYPE_IS_SET(prop_info->type)) { uint32_t var_info = MAY_BE_ANY|MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN; zend_jit_addr var_addr = prop_addr; if (use_prop_guard) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_NOT_ZVAL_TYPE var_addr, prop_type, &exit_addr ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), prop_type, (ptrdiff_t)(exit_addr)); #line 13538 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" var_info = (1 << prop_type) | (var_info & ~(MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)); } if (var_info & MAY_BE_REF) { may_throw = 1; var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); if (Z_REG(prop_addr) != ZREG_FCARG1 || Z_OFFSET(prop_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, prop_addr if (Z_MODE(prop_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(prop_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(prop_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(prop_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(prop_addr)))>>32)); } } else if (Z_MODE(prop_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(prop_addr)) { dasm_put(Dst, 2220, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); } else { dasm_put(Dst, 2228, (Z_REG(prop_addr))); } } else { ZEND_UNREACHABLE(); } #line 13546 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| IF_NOT_ZVAL_TYPE var_addr, IS_REFERENCE, >2 ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); #line 13548 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_PTR FCARG1a, var_addr dasm_put(Dst, 2131, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); #line 13549 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp aword [FCARG1a + offsetof(zend_reference, sources.ptr)], 0 //| jnz >1 //| lea FCARG1a, aword [FCARG1a + offsetof(zend_reference, val)] //|.cold_code dasm_put(Dst, 7708, (Z_REG(var_addr)), Z_OFFSET(var_addr), offsetof(zend_reference, sources.ptr), offsetof(zend_reference, val)); #line 13553 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 13554 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 13556 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->result_type == IS_UNUSED) { //| xor FCARG2a, FCARG2a dasm_put(Dst, 2269); #line 13559 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LOAD_ZVAL_ADDR FCARG2a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2255, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2263, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 13561 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } switch (opline->opcode) { case ZEND_PRE_INC_OBJ: //| EXT_CALL zend_jit_pre_inc_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_pre_inc_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_pre_inc_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_pre_inc_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_pre_inc_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_pre_inc_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_pre_inc_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 13565 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_PRE_DEC_OBJ: //| EXT_CALL zend_jit_pre_dec_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_pre_dec_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_pre_dec_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_pre_dec_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_pre_dec_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_pre_dec_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_pre_dec_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 13568 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_POST_INC_OBJ: //| EXT_CALL zend_jit_post_inc_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_post_inc_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_post_inc_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_post_inc_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_post_inc_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_post_inc_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_post_inc_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 13571 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_POST_DEC_OBJ: //| EXT_CALL zend_jit_post_dec_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_post_dec_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_post_dec_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_post_dec_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_post_dec_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_post_dec_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_post_dec_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 13574 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; default: ZEND_UNREACHABLE(); } //| jmp >9 //|.code dasm_put(Dst, 4046); #line 13580 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 13581 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (var_info & MAY_BE_LONG) { if (var_info & (MAY_BE_ANY - MAY_BE_LONG)) { //| IF_NOT_ZVAL_TYPE var_addr, IS_LONG, >2 ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2131, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 13586 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode == ZEND_POST_INC_OBJ || opline->opcode == ZEND_POST_DEC_OBJ) { if (opline->result_type != IS_UNUSED) { //| ZVAL_COPY_VALUE res_addr, -1, var_addr, MAY_BE_LONG, ZREG_R1, ZREG_R2 if (MAY_BE_LONG & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(var_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(var_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(var_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(var_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(var_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(var_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(var_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(var_addr))); } } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else if (Z_MODE(var_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(var_addr)) { dasm_put(Dst, 1682, (Z_REG(var_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(var_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(var_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(var_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(var_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(var_addr))); } } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else if (Z_MODE(var_addr) == IS_REG) { if (ZREG_R2 != Z_REG(var_addr)) { dasm_put(Dst, 1682, (Z_REG(var_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(var_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(var_addr) != IS_REG || Z_REG(res_addr) != Z_REG(var_addr)) { if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(var_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(var_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(var_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } else if (Z_MODE(var_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(var_addr) != IS_REG || ZREG_XMM0 != Z_REG(var_addr)) { if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(var_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(var_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(var_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } else if (Z_MODE(var_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(MAY_BE_LONG & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((MAY_BE_LONG & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(MAY_BE_LONG & MAY_BE_GUARD) && has_concrete_type(MAY_BE_LONG & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((-1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(MAY_BE_LONG); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R1), (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 13590 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (opline->opcode == ZEND_PRE_INC_OBJ || opline->opcode == ZEND_POST_INC_OBJ) { //| LONG_OP_WITH_32BIT_CONST add, var_addr, Z_L(1) if (Z_MODE(var_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2144, (Z_REG(var_addr)), Z_OFFSET(var_addr), Z_L(1)); } else if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 2153, (Z_REG(var_addr)), Z_L(1)); } else { ZEND_UNREACHABLE(); } #line 13594 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LONG_OP_WITH_32BIT_CONST sub, var_addr, Z_L(1) if (Z_MODE(var_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 2160, (Z_REG(var_addr)), Z_OFFSET(var_addr), Z_L(1)); } else if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 2169, (Z_REG(var_addr)), Z_L(1)); } else { ZEND_UNREACHABLE(); } #line 13596 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| jo >3 dasm_put(Dst, 7730); #line 13598 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode == ZEND_PRE_INC_OBJ || opline->opcode == ZEND_PRE_DEC_OBJ) { if (opline->result_type != IS_UNUSED) { //| ZVAL_COPY_VALUE res_addr, -1, var_addr, MAY_BE_LONG, ZREG_R0, ZREG_R2 if (MAY_BE_LONG & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(var_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(var_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(var_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(var_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(var_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(var_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(var_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(var_addr))); } } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else if (Z_MODE(var_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(var_addr)) { dasm_put(Dst, 1682, (Z_REG(var_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(var_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(var_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(var_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(var_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(var_addr))); } } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else if (Z_MODE(var_addr) == IS_REG) { if (ZREG_R2 != Z_REG(var_addr)) { dasm_put(Dst, 1682, (Z_REG(var_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(var_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(var_addr) != IS_REG || Z_REG(res_addr) != Z_REG(var_addr)) { if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(var_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(var_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(var_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } else if (Z_MODE(var_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(var_addr) != IS_REG || ZREG_XMM0 != Z_REG(var_addr)) { if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(var_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(var_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(var_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } else if (Z_MODE(var_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(MAY_BE_LONG & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((MAY_BE_LONG & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(MAY_BE_LONG & MAY_BE_GUARD) && has_concrete_type(MAY_BE_LONG & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((-1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (MAY_BE_LONG & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(MAY_BE_LONG); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 13601 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //|.cold_code dasm_put(Dst, 289); #line 13604 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (var_info & (MAY_BE_ANY - MAY_BE_LONG)) { if (var_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { may_throw = 1; } if (var_info & MAY_BE_LONG) { //|2: dasm_put(Dst, 1944); #line 13611 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (Z_REG(var_addr) != ZREG_FCARG1 || Z_OFFSET(var_addr) != 0) { var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); //| LOAD_ZVAL_ADDR FCARG1a, prop_addr if (Z_MODE(prop_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(prop_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(prop_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(prop_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(prop_addr)))>>32)); } } else if (Z_MODE(prop_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(prop_addr)) { dasm_put(Dst, 2220, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); } else { dasm_put(Dst, 2228, (Z_REG(prop_addr))); } } else { ZEND_UNREACHABLE(); } #line 13615 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode == ZEND_POST_INC_OBJ || opline->opcode == ZEND_POST_DEC_OBJ) { //| ZVAL_COPY_VALUE res_addr, -1, var_addr, MAY_BE_ANY, ZREG_R0, ZREG_R2 if (MAY_BE_ANY & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(var_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(var_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(var_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(var_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(var_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(var_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(var_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(var_addr))); } } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else if (Z_MODE(var_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(var_addr)) { dasm_put(Dst, 1682, (Z_REG(var_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(var_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R2), (ZREG_R2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(var_addr)))) { dasm_put(Dst, 1658, (ZREG_R2), (unsigned int)(Z_LVAL_P(Z_ZV(var_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(var_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R2), Z_LVAL_P(Z_ZV(var_addr))); } } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else if (Z_MODE(var_addr) == IS_REG) { if (ZREG_R2 != Z_REG(var_addr)) { dasm_put(Dst, 1682, (Z_REG(var_addr)), (ZREG_R2)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R2), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(var_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(var_addr) != IS_REG || Z_REG(res_addr) != Z_REG(var_addr)) { if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(var_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(var_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(var_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } else if (Z_MODE(var_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(var_addr) != IS_REG || ZREG_XMM0 != Z_REG(var_addr)) { if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(var_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(var_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(var_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } else if (Z_MODE(var_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(MAY_BE_ANY & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((MAY_BE_ANY & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(MAY_BE_ANY & MAY_BE_GUARD) && has_concrete_type(MAY_BE_ANY & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((-1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(MAY_BE_ANY); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 13618 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| TRY_ADDREF MAY_BE_ANY, ah, r2 if (MAY_BE_ANY & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (MAY_BE_ANY & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 2287); } dasm_put(Dst, 2112); } #line 13619 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode == ZEND_PRE_INC_OBJ || opline->opcode == ZEND_POST_INC_OBJ) { if (opline->opcode == ZEND_PRE_INC_OBJ && opline->result_type != IS_UNUSED) { //| LOAD_ZVAL_ADDR FCARG2a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2255, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2263, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 13623 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_pre_inc, r0 if (MAY_USE_32BIT_ADDR(zend_jit_pre_inc)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_pre_inc)); } else { if (IS_SIGNED_32BIT(zend_jit_pre_inc)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_pre_inc)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_pre_inc)), (unsigned int)((((ptrdiff_t)zend_jit_pre_inc))>>32)); } dasm_put(Dst, 59); } #line 13624 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL increment_function, r0 if (MAY_USE_32BIT_ADDR(increment_function)) { dasm_put(Dst, 46, (ptrdiff_t)(increment_function)); } else { if (IS_SIGNED_32BIT(increment_function)) { dasm_put(Dst, 49, ((ptrdiff_t)increment_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)increment_function)), (unsigned int)((((ptrdiff_t)increment_function))>>32)); } dasm_put(Dst, 59); } #line 13626 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { if (opline->opcode == ZEND_PRE_DEC_OBJ && opline->result_type != IS_UNUSED) { //| LOAD_ZVAL_ADDR FCARG2a, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 2255, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 2263, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 13630 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_pre_dec, r0 if (MAY_USE_32BIT_ADDR(zend_jit_pre_dec)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_pre_dec)); } else { if (IS_SIGNED_32BIT(zend_jit_pre_dec)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_pre_dec)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_pre_dec)), (unsigned int)((((ptrdiff_t)zend_jit_pre_dec))>>32)); } dasm_put(Dst, 59); } #line 13631 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL decrement_function, r0 if (MAY_USE_32BIT_ADDR(decrement_function)) { dasm_put(Dst, 46, (ptrdiff_t)(decrement_function)); } else { if (IS_SIGNED_32BIT(decrement_function)) { dasm_put(Dst, 49, ((ptrdiff_t)decrement_function)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)decrement_function)), (unsigned int)((((ptrdiff_t)decrement_function))>>32)); } dasm_put(Dst, 59); } #line 13633 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (var_info & MAY_BE_LONG) { //| jmp >4 dasm_put(Dst, 341); #line 13637 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (var_info & MAY_BE_LONG) { //|3: dasm_put(Dst, 346); #line 13641 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode == ZEND_PRE_INC_OBJ || opline->opcode == ZEND_POST_INC_OBJ) { //|.if X64 //| mov64 rax, 0x43e0000000000000 //| SET_ZVAL_LVAL var_addr, rax dasm_put(Dst, 54, (unsigned int)(0x43e0000000000000), (unsigned int)((0x43e0000000000000)>>32)); if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 2185, (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(var_addr)), Z_OFFSET(var_addr)); } #line 13645 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO var_addr, IS_DOUBLE ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); #line 13646 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode == ZEND_PRE_INC_OBJ && opline->result_type != IS_UNUSED) { //| SET_ZVAL_LVAL res_addr, rax if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 2185, (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } #line 13648 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); #line 13649 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.else //| SET_ZVAL_LVAL var_addr, 0 //| SET_ZVAL_W2 var_addr, 0x41e00000 //| SET_ZVAL_TYPE_INFO var_addr, IS_DOUBLE if (opline->opcode == ZEND_PRE_INC_OBJ && opline->result_type != IS_UNUSED) { //| SET_ZVAL_LVAL res_addr, 0 //| SET_ZVAL_W2 res_addr, 0x41e00000 //| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE } //|.endif } else { //|.if X64 //| mov64 rax, 0xc3e0000000000000 //| SET_ZVAL_LVAL var_addr, rax dasm_put(Dst, 54, (unsigned int)(0xc3e0000000000000), (unsigned int)((0xc3e0000000000000)>>32)); if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 2185, (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(var_addr)), Z_OFFSET(var_addr)); } #line 13664 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO var_addr, IS_DOUBLE ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); #line 13665 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->opcode == ZEND_PRE_DEC_OBJ && opline->result_type != IS_UNUSED) { //| SET_ZVAL_LVAL res_addr, rax if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 2185, (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } #line 13667 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); #line 13668 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.else //| SET_ZVAL_LVAL var_addr, 0x00200000 //| SET_ZVAL_W2 var_addr, 0xc1e00000 //| SET_ZVAL_TYPE_INFO var_addr, IS_DOUBLE if (opline->opcode == ZEND_PRE_DEC_OBJ && opline->result_type != IS_UNUSED) { //| SET_ZVAL_LVAL res_addr, 0x00200000 //| SET_ZVAL_W2 res_addr, 0xc1e00000 //| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE } //|.endif } if (opline->result_type != IS_UNUSED && (opline->opcode == ZEND_PRE_INC_OBJ || opline->opcode == ZEND_PRE_DEC_OBJ) && prop_info && !ZEND_TYPE_IS_SET(prop_info->type) && (res_info & MAY_BE_GUARD) && (res_info & MAY_BE_LONG)) { zend_jit_trace_stack *stack = JIT_G(current_frame)->stack; uint32_t old_res_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); int32_t exit_point; const void *exit_addr; SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_DOUBLE, 0); exit_point = zend_jit_trace_get_exit_point(opline + 1, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_res_info); ssa->var_info[ssa_op->result_def].type = res_info & ~MAY_BE_GUARD; //| jmp &exit_addr //|.code dasm_put(Dst, 3671, (ptrdiff_t)(exit_addr)); #line 13701 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >4 //|.code dasm_put(Dst, 382); #line 13704 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|4: dasm_put(Dst, 388); #line 13705 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } if (needs_slow_path) { may_throw = 1; //|.cold_code dasm_put(Dst, 289); #line 13712 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|7: //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 4315); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 13714 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // value = zobj->handlers->write_property(zobj, name, value, CACHE_ADDR(opline->extended_value)); //| LOAD_ADDR FCARG2a, name if (IS_SIGNED_32BIT(name)) { dasm_put(Dst, 712, ((ptrdiff_t)name)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)name)), (unsigned int)((((ptrdiff_t)name))>>32)); } #line 13716 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| mov CARG3, EX->run_time_cache //| add CARG3, opline->extended_value dasm_put(Dst, 7735, Dt1(->run_time_cache), opline->extended_value); #line 13719 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->result_type == IS_UNUSED) { //| xor CARG4, CARG4 dasm_put(Dst, 4349); #line 13721 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LOAD_ZVAL_ADDR CARG4, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 4353, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 4358, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 4363, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 4371, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 13723 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.else //| sub r4, 8 if (opline->result_type == IS_UNUSED) { //| push 0 } else { //| PUSH_ZVAL_ADDR res_addr, r0 } //| mov r0, EX->run_time_cache //| add r0, opline->extended_value //| push r0 //|.endif switch (opline->opcode) { case ZEND_PRE_INC_OBJ: //| EXT_CALL zend_jit_pre_inc_obj_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_pre_inc_obj_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_pre_inc_obj_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_pre_inc_obj_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_pre_inc_obj_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_pre_inc_obj_helper)), (unsigned int)((((ptrdiff_t)zend_jit_pre_inc_obj_helper))>>32)); } dasm_put(Dst, 59); } #line 13739 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_PRE_DEC_OBJ: //| EXT_CALL zend_jit_pre_dec_obj_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_pre_dec_obj_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_pre_dec_obj_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_pre_dec_obj_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_pre_dec_obj_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_pre_dec_obj_helper)), (unsigned int)((((ptrdiff_t)zend_jit_pre_dec_obj_helper))>>32)); } dasm_put(Dst, 59); } #line 13742 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_POST_INC_OBJ: //| EXT_CALL zend_jit_post_inc_obj_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_post_inc_obj_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_post_inc_obj_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_post_inc_obj_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_post_inc_obj_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_post_inc_obj_helper)), (unsigned int)((((ptrdiff_t)zend_jit_post_inc_obj_helper))>>32)); } dasm_put(Dst, 59); } #line 13745 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; case ZEND_POST_DEC_OBJ: //| EXT_CALL zend_jit_post_dec_obj_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_post_dec_obj_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_post_dec_obj_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_post_dec_obj_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_post_dec_obj_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_post_dec_obj_helper)), (unsigned int)((((ptrdiff_t)zend_jit_post_dec_obj_helper))>>32)); } dasm_put(Dst, 59); } #line 13748 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" break; default: ZEND_UNREACHABLE(); } //|.if not(X64) //| add r4, 8 //|.endif //| jmp >9 //|.code dasm_put(Dst, 4046); #line 13759 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|9: dasm_put(Dst, 4072); #line 13762 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op1_type != IS_UNUSED && !delayed_fetch_this && !op1_indirect) { if ((op1_info & MAY_HAVE_DTOR) && (op1_info & MAY_BE_RC1)) { may_throw = 1; } //| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 13767 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (may_throw) { if (!zend_jit_check_exception(Dst)) { return 0; } } return 1; } static int zend_jit_assign_obj_op(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, zend_ssa *ssa, const zend_ssa_op *ssa_op, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t val_info, zend_ssa_range *val_range, bool op1_indirect, zend_class_entry *ce, bool ce_is_instanceof, bool on_this, bool delayed_fetch_this, zend_class_entry *trace_ce, uint8_t prop_type) { zval *member; zend_string *name; zend_property_info *prop_info; zend_jit_addr val_addr = OP1_DATA_ADDR(); zend_jit_addr this_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, offsetof(zend_execute_data, This)); zend_jit_addr prop_addr; bool needs_slow_path = 0; bool use_prop_guard = 0; bool may_throw = 0; binary_op_type binary_op = get_binary_op(opline->extended_value); ZEND_ASSERT(opline->op2_type == IS_CONST); ZEND_ASSERT(op1_info & MAY_BE_OBJECT); ZEND_ASSERT(opline->result_type == IS_UNUSED); member = RT_CONSTANT(opline, opline->op2); ZEND_ASSERT(Z_TYPE_P(member) == IS_STRING && Z_STRVAL_P(member)[0] != '\0'); name = Z_STR_P(member); prop_info = zend_get_known_property_info(op_array, ce, name, on_this, op_array->filename); if (on_this) { //| GET_ZVAL_PTR FCARG1a, this_addr ZEND_ASSERT(Z_MODE(this_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(this_addr)), Z_OFFSET(this_addr)); #line 13817 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (opline->op1_type == IS_VAR && (op1_info & MAY_BE_INDIRECT) && Z_REG(op1_addr) == ZREG_FP) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 13822 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_NOT_Z_TYPE FCARG1a, IS_INDIRECT, >1 //| GET_Z_PTR FCARG1a, FCARG1a //|1: dasm_put(Dst, 7333, offsetof(zval, u1.v.type), IS_INDIRECT); #line 13825 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } if (op1_info & MAY_BE_REF) { if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 13830 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| ZVAL_DEREF FCARG1a, op1_info if (op1_info & MAY_BE_REF) { dasm_put(Dst, 5095, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 13832 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } if (op1_info & ((MAY_BE_UNDEF|MAY_BE_ANY)- MAY_BE_OBJECT)) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_NOT_ZVAL_TYPE op1_addr, IS_OBJECT, &exit_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT, (ptrdiff_t)(exit_addr)); #line 13843 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_OBJECT, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 13845 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 3265, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT); #line 13846 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 63); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 13848 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 13850 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ADDR FCARG2a, ZSTR_VAL(name) if (IS_SIGNED_32BIT(ZSTR_VAL(name))) { dasm_put(Dst, 712, ((ptrdiff_t)ZSTR_VAL(name))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)ZSTR_VAL(name))), (unsigned int)((((ptrdiff_t)ZSTR_VAL(name)))>>32)); } #line 13852 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_UNDEF) { //| EXT_CALL zend_jit_invalid_property_assign_op, r0 if (MAY_USE_32BIT_ADDR(zend_jit_invalid_property_assign_op)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_invalid_property_assign_op)); } else { if (IS_SIGNED_32BIT(zend_jit_invalid_property_assign_op)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_invalid_property_assign_op)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_invalid_property_assign_op)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_property_assign_op))>>32)); } dasm_put(Dst, 59); } #line 13854 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_invalid_property_assign, r0 if (MAY_USE_32BIT_ADDR(zend_jit_invalid_property_assign)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_invalid_property_assign)); } else { if (IS_SIGNED_32BIT(zend_jit_invalid_property_assign)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_invalid_property_assign)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_invalid_property_assign)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_property_assign))>>32)); } dasm_put(Dst, 59); } #line 13856 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } may_throw = 1; if (((opline+1)->op1_type & (IS_VAR|IS_TMP_VAR)) && (val_info & (MAY_BE_REF|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { may_throw = 1; //| jmp >8 dasm_put(Dst, 3676); #line 13862 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >9 dasm_put(Dst, 3591); #line 13864 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code dasm_put(Dst, 386); #line 13866 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| GET_ZVAL_PTR FCARG1a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 13869 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!prop_info && trace_ce && (trace_ce->ce_flags & ZEND_ACC_IMMUTABLE)) { prop_info = zend_get_known_property_info(op_array, trace_ce, name, on_this, op_array->filename); if (prop_info) { ce = trace_ce; ce_is_instanceof = 0; if (!(op1_info & MAY_BE_CLASS_GUARD)) { if (on_this && JIT_G(current_frame) && TRACE_FRAME_IS_THIS_CLASS_CHECKED(JIT_G(current_frame))) { ZEND_ASSERT(JIT_G(current_frame)->ce == ce); } else if (zend_jit_class_guard(Dst, opline, ce)) { if (on_this && JIT_G(current_frame)) { JIT_G(current_frame)->ce = ce; TRACE_FRAME_SET_THIS_CLASS_CHECKED(JIT_G(current_frame)); } } else { return 0; } if (ssa->var_info && ssa_op->op1_use >= 0) { ssa->var_info[ssa_op->op1_use].type |= MAY_BE_CLASS_GUARD; ssa->var_info[ssa_op->op1_use].ce = ce; ssa->var_info[ssa_op->op1_use].is_instanceof = ce_is_instanceof; } if (ssa->var_info && ssa_op->op1_def >= 0) { ssa->var_info[ssa_op->op1_def].type |= MAY_BE_CLASS_GUARD; ssa->var_info[ssa_op->op1_def].ce = ce; ssa->var_info[ssa_op->op1_def].is_instanceof = ce_is_instanceof; } } } } use_prop_guard = (prop_type != IS_UNKNOWN && prop_type != IS_UNDEF && prop_type != IS_REFERENCE && (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_OBJECT); if (!prop_info) { needs_slow_path = 1; //| mov r0, EX->run_time_cache //| mov r2, aword [r0 + (opline+1)->extended_value] //| cmp r2, aword [FCARG1a + offsetof(zend_object, ce)] //| jne >7 dasm_put(Dst, 7641, Dt1(->run_time_cache), (opline+1)->extended_value, offsetof(zend_object, ce)); #line 13914 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!ce || ce_is_instanceof || (ce->ce_flags & (ZEND_ACC_HAS_TYPE_HINTS|ZEND_ACC_TRAIT))) { //| cmp aword [r0 + (opline+1)->extended_value + sizeof(void*) * 2], 0 //| jnz >7 dasm_put(Dst, 7658, (opline+1)->extended_value + sizeof(void*) * 2); #line 13917 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov r0, aword [r0 + (opline+1)->extended_value + sizeof(void*)] //| test r0, r0 //| jl >7 dasm_put(Dst, 7668, (opline+1)->extended_value + sizeof(void*)); #line 13921 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!use_prop_guard) { //| IF_TYPE byte [FCARG1a + r0 + 8], IS_UNDEF, >7 dasm_put(Dst, 7680, 8, IS_UNDEF); #line 13923 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| add FCARG1a, r0 dasm_put(Dst, 7389); #line 13925 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" prop_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } else { prop_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, prop_info->offset); if (ZEND_TYPE_IS_SET(prop_info->type) || !use_prop_guard) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_TYPE byte [FCARG1a + prop_info->offset + 8], IS_UNDEF, &exit_addr dasm_put(Dst, 7691, prop_info->offset + 8, IS_UNDEF, (ptrdiff_t)(exit_addr)); #line 13937 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_TYPE byte [FCARG1a + prop_info->offset + 8], IS_UNDEF, >7 dasm_put(Dst, 7699, prop_info->offset + 8, IS_UNDEF); #line 13939 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" needs_slow_path = 1; } } if (ZEND_TYPE_IS_SET(prop_info->type)) { uint32_t info = val_info; may_throw = 1; if (opline) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 13949 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| IF_ZVAL_TYPE prop_addr, IS_REFERENCE, >1 ZEND_ASSERT(Z_MODE(prop_addr) == IS_MEM_ZVAL); #line 13952 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 3819, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); #line 13953 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| GET_ZVAL_PTR FCARG1a, prop_addr dasm_put(Dst, 63); ZEND_ASSERT(Z_MODE(prop_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); #line 13955 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(val_addr) != IS_MEM_ZVAL || Z_REG(val_addr) != ZREG_FCARG2 || Z_OFFSET(val_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG2a, val_addr if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(val_addr)) { dasm_put(Dst, 2255, (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 2263, (Z_REG(val_addr))); } } else { ZEND_UNREACHABLE(); } #line 13957 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if X64 //| LOAD_ADDR CARG3, binary_op if (IS_SIGNED_32BIT(binary_op)) { dasm_put(Dst, 3293, ((ptrdiff_t)binary_op)); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)binary_op)), (unsigned int)((((ptrdiff_t)binary_op))>>32)); } #line 13960 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ADDR binary_op, r0 //|.endif if (((opline+1)->op1_type & (IS_TMP_VAR|IS_VAR)) && (val_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| EXT_CALL zend_jit_assign_op_to_typed_ref_tmp, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_op_to_typed_ref_tmp)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_op_to_typed_ref_tmp)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_op_to_typed_ref_tmp)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp)), (unsigned int)((((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp))>>32)); } dasm_put(Dst, 59); } #line 13967 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_assign_op_to_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_op_to_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_op_to_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_op_to_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_op_to_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_assign_op_to_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 13969 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if not(X64) //| add r4, 12 //|.endif //| jmp >9 //|.code dasm_put(Dst, 4046); #line 13975 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC); if (ce && ce->ce_flags & ZEND_ACC_IMMUTABLE) { //| LOAD_ADDR FCARG2a, prop_info if (IS_SIGNED_32BIT(prop_info)) { dasm_put(Dst, 712, ((ptrdiff_t)prop_info)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)prop_info)), (unsigned int)((((ptrdiff_t)prop_info))>>32)); } #line 13980 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { int prop_info_offset = (((prop_info->offset - (sizeof(zend_object) - sizeof(zval))) / sizeof(zval)) * sizeof(void*)); //| mov r0, aword [FCARG1a + offsetof(zend_object, ce)] //| mov r0, aword [r0 + offsetof(zend_class_entry, properties_info_table)] //| mov FCARG2a, aword[r0 + prop_info_offset] dasm_put(Dst, 7558, offsetof(zend_object, ce), offsetof(zend_class_entry, properties_info_table), prop_info_offset); #line 13987 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ZVAL_ADDR FCARG1a, prop_addr if (Z_MODE(prop_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(prop_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(prop_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(prop_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(prop_addr)))>>32)); } } else if (Z_MODE(prop_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(prop_addr)) { dasm_put(Dst, 2220, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); } else { dasm_put(Dst, 2228, (Z_REG(prop_addr))); } } else { ZEND_UNREACHABLE(); } #line 13989 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| LOAD_ZVAL_ADDR CARG3, val_addr if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(val_addr)) { dasm_put(Dst, 3303, (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 3311, (Z_REG(val_addr))); } } else { ZEND_UNREACHABLE(); } #line 13991 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| LOAD_ADDR CARG4, binary_op if (IS_SIGNED_32BIT(binary_op)) { dasm_put(Dst, 4353, ((ptrdiff_t)binary_op)); } else { dasm_put(Dst, 4358, (unsigned int)(((ptrdiff_t)binary_op)), (unsigned int)((((ptrdiff_t)binary_op))>>32)); } #line 13992 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 8 //| PUSH_ADDR binary_op, r0 //| PUSH_ZVAL_ADDR val_addr, r0 //|.endif //| EXT_CALL zend_jit_assign_op_to_typed_prop, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_op_to_typed_prop)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_op_to_typed_prop)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_op_to_typed_prop)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_op_to_typed_prop)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_op_to_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_assign_op_to_typed_prop))>>32)); } dasm_put(Dst, 59); } #line 13999 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) //| add r4, 8 //|.endif if (info & (MAY_BE_REF|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { info |= MAY_BE_RC1|MAY_BE_RCN; } //| FREE_OP (opline+1)->op1_type, (opline+1)->op1, info, 0, NULL if ((opline+1)->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))); if (((info) & MAY_BE_GUARD) || RC_MAY_BE_1(info)) { if (((info) & MAY_BE_GUARD) || RC_MAY_BE_N(info)) { if (0 && (((info) & MAY_BE_GUARD) || (RC_MAY_BE_N(info) && ((info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((info) & MAY_BE_GUARD) && has_concrete_type((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((info) & MAY_BE_GUARD) || (RC_MAY_BE_N(info) && ((info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((info) & MAY_BE_GUARD) || (RC_MAY_BE_N(info) && ((info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 14009 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!prop_info || !ZEND_TYPE_IS_SET(prop_info->type)) { zend_jit_addr var_addr = prop_addr; uint32_t var_info = MAY_BE_ANY|MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN; uint32_t var_def_info = MAY_BE_ANY|MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN; if (use_prop_guard) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_NOT_ZVAL_TYPE var_addr, prop_type, &exit_addr ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), prop_type, (ptrdiff_t)(exit_addr)); #line 14025 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" var_info = (1 << prop_type) | (var_info & ~(MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)); } if (var_info & MAY_BE_REF) { may_throw = 1; var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0); //| LOAD_ZVAL_ADDR r0, prop_addr if (Z_MODE(prop_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(prop_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(prop_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(prop_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(prop_addr)))>>32)); } } else if (Z_MODE(prop_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(prop_addr)) { dasm_put(Dst, 6282, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); } else { dasm_put(Dst, 6290, (Z_REG(prop_addr))); } } else { ZEND_UNREACHABLE(); } #line 14032 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_NOT_ZVAL_TYPE var_addr, IS_REFERENCE, >2 ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); #line 14033 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_PTR FCARG1a, var_addr dasm_put(Dst, 2131, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); #line 14034 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| cmp aword [FCARG1a + offsetof(zend_reference, sources.ptr)], 0 //| jnz >1 //| lea r0, aword [FCARG1a + offsetof(zend_reference, val)] //|.cold_code dasm_put(Dst, 7744, (Z_REG(var_addr)), Z_OFFSET(var_addr), offsetof(zend_reference, sources.ptr), offsetof(zend_reference, val)); #line 14038 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 14039 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(val_addr) != IS_MEM_ZVAL || Z_REG(val_addr) != ZREG_FCARG2 || Z_OFFSET(val_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG2a, val_addr if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(val_addr)) { dasm_put(Dst, 2255, (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 2263, (Z_REG(val_addr))); } } else { ZEND_UNREACHABLE(); } #line 14041 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 14044 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if X64 //| LOAD_ADDR CARG3, binary_op if (IS_SIGNED_32BIT(binary_op)) { dasm_put(Dst, 3293, ((ptrdiff_t)binary_op)); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)binary_op)), (unsigned int)((((ptrdiff_t)binary_op))>>32)); } #line 14047 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 12 //| PUSH_ADDR binary_op, r0 //|.endif if (((opline+1)->op1_type & (IS_TMP_VAR|IS_VAR)) && (val_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| EXT_CALL zend_jit_assign_op_to_typed_ref_tmp, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_op_to_typed_ref_tmp)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_op_to_typed_ref_tmp)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_op_to_typed_ref_tmp)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp)), (unsigned int)((((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp))>>32)); } dasm_put(Dst, 59); } #line 14054 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| EXT_CALL zend_jit_assign_op_to_typed_ref, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_op_to_typed_ref)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_op_to_typed_ref)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_op_to_typed_ref)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_op_to_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_assign_op_to_typed_ref))>>32)); } dasm_put(Dst, 59); } #line 14056 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if not(X64) //| add r4, 12 //|.endif //| jmp >9 //|.code dasm_put(Dst, 4046); #line 14062 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 14063 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" var_info &= ~MAY_BE_REF; } switch (opline->extended_value) { case ZEND_ADD: case ZEND_SUB: case ZEND_MUL: if ((var_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) || (val_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (opline->extended_value != ZEND_ADD || (var_info & MAY_BE_ANY) != MAY_BE_ARRAY || (val_info & MAY_BE_ANY) == MAY_BE_ARRAY) { may_throw = 1; } } if (!zend_jit_math_helper(Dst, opline, opline->extended_value, IS_CV, opline->op1, var_addr, var_info, (opline+1)->op1_type, (opline+1)->op1, val_addr, val_info, 0, var_addr, var_def_info, var_info, 1 /* may overflow */, 0)) { return 0; } break; case ZEND_BW_OR: case ZEND_BW_AND: case ZEND_BW_XOR: may_throw = 1; if ((var_info & (MAY_BE_STRING|MAY_BE_DOUBLE|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) || (val_info & (MAY_BE_STRING|MAY_BE_DOUBLE|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if ((var_info & MAY_BE_ANY) != MAY_BE_STRING || (val_info & MAY_BE_ANY) != MAY_BE_STRING) { may_throw = 1; } } goto long_math; case ZEND_SL: case ZEND_SR: if ((var_info & (MAY_BE_STRING|MAY_BE_DOUBLE|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) || (val_info & (MAY_BE_STRING|MAY_BE_DOUBLE|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { may_throw = 1; } if ((opline+1)->op1_type != IS_CONST || Z_TYPE_P(RT_CONSTANT((opline+1), (opline+1)->op1)) != IS_LONG || Z_LVAL_P(RT_CONSTANT((opline+1), (opline+1)->op1)) < 0) { may_throw = 1; } goto long_math; case ZEND_MOD: if ((var_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) || (val_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (opline->extended_value != ZEND_ADD || (var_info & MAY_BE_ANY) != MAY_BE_ARRAY || (val_info & MAY_BE_ANY) == MAY_BE_ARRAY) { may_throw = 1; } } if ((opline+1)->op1_type != IS_CONST || Z_TYPE_P(RT_CONSTANT((opline+1), (opline+1)->op1)) != IS_LONG || Z_LVAL_P(RT_CONSTANT((opline+1), (opline+1)->op1)) == 0) { may_throw = 1; } long_math: if (!zend_jit_long_math_helper(Dst, opline, opline->extended_value, IS_CV, opline->op1, var_addr, var_info, NULL, (opline+1)->op1_type, (opline+1)->op1, val_addr, val_info, val_range, 0, var_addr, var_def_info, var_info, /* may throw */ 1)) { return 0; } break; case ZEND_CONCAT: may_throw = 1; if (!zend_jit_concat_helper(Dst, opline, IS_CV, opline->op1, var_addr, var_info, (opline+1)->op1_type, (opline+1)->op1, val_addr, val_info, var_addr, 0)) { return 0; } break; default: ZEND_UNREACHABLE(); } } if (needs_slow_path) { may_throw = 1; //|.cold_code dasm_put(Dst, 289); #line 14145 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|7: //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 4315); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 14147 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // value = zobj->handlers->write_property(zobj, name, value, CACHE_ADDR(opline->extended_value)); //| LOAD_ADDR FCARG2a, name if (IS_SIGNED_32BIT(name)) { dasm_put(Dst, 712, ((ptrdiff_t)name)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)name)), (unsigned int)((((ptrdiff_t)name))>>32)); } #line 14149 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| LOAD_ZVAL_ADDR CARG3, val_addr if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(val_addr)) { dasm_put(Dst, 3303, (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 3311, (Z_REG(val_addr))); } } else { ZEND_UNREACHABLE(); } #line 14151 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov CARG4, EX->run_time_cache //| add CARG4, (opline+1)->extended_value //|.if X64WIN //| LOAD_ADDR r0, binary_op //| mov aword A5, r0 //|.else //| LOAD_ADDR CARG5, binary_op dasm_put(Dst, 7766, Dt1(->run_time_cache), (opline+1)->extended_value); if (IS_SIGNED_32BIT(binary_op)) { dasm_put(Dst, 7775, ((ptrdiff_t)binary_op)); } else { dasm_put(Dst, 7780, (unsigned int)(((ptrdiff_t)binary_op)), (unsigned int)((((ptrdiff_t)binary_op))>>32)); } #line 14158 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.endif //|.else //| sub r4, 4 //| PUSH_ADDR binary_op, r0 //| mov r0, EX->run_time_cache //| add r0, (opline+1)->extended_value //| push r0 //| PUSH_ZVAL_ADDR val_addr, r0 //|.endif //| EXT_CALL zend_jit_assign_obj_op_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_obj_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_obj_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_obj_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_obj_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_obj_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_assign_obj_op_helper))>>32)); } dasm_put(Dst, 59); } #line 14169 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) //| add r4, 4 //|.endif if (val_info & (MAY_BE_REF|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { val_info |= MAY_BE_RC1|MAY_BE_RCN; } //|8: //| // FREE_OP_DATA(); //| FREE_OP (opline+1)->op1_type, (opline+1)->op1, val_info, 0, opline dasm_put(Dst, 4117); if ((opline+1)->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((val_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))); if (((val_info) & MAY_BE_GUARD) || RC_MAY_BE_1(val_info)) { if (((val_info) & MAY_BE_GUARD) || RC_MAY_BE_N(val_info)) { if (0 && (((val_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(val_info) && ((val_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((val_info) & MAY_BE_GUARD) && has_concrete_type((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((val_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((val_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((val_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(val_info) && ((val_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((val_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(val_info) && ((val_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((val_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((val_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 14181 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >9 //|.code dasm_put(Dst, 4046); #line 14183 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|9: dasm_put(Dst, 4072); #line 14186 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op1_type != IS_UNUSED && !delayed_fetch_this && !op1_indirect) { if ((op1_info & MAY_HAVE_DTOR) && (op1_info & MAY_BE_RC1)) { may_throw = 1; } //| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 14191 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (may_throw) { if (!zend_jit_check_exception(Dst)) { return 0; } } return 1; } static int zend_jit_assign_obj(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, zend_ssa *ssa, const zend_ssa_op *ssa_op, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t val_info, bool op1_indirect, zend_class_entry *ce, bool ce_is_instanceof, bool on_this, bool delayed_fetch_this, zend_class_entry *trace_ce, uint8_t prop_type, int may_throw) { zval *member; zend_string *name; zend_property_info *prop_info; zend_jit_addr val_addr = OP1_DATA_ADDR(); zend_jit_addr res_addr = 0; zend_jit_addr this_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, offsetof(zend_execute_data, This)); zend_jit_addr prop_addr; bool needs_slow_path = 0; bool needs_val_dtor = 0; if (RETURN_VALUE_USED(opline)) { res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); } ZEND_ASSERT(opline->op2_type == IS_CONST); ZEND_ASSERT(op1_info & MAY_BE_OBJECT); member = RT_CONSTANT(opline, opline->op2); ZEND_ASSERT(Z_TYPE_P(member) == IS_STRING && Z_STRVAL_P(member)[0] != '\0'); name = Z_STR_P(member); prop_info = zend_get_known_property_info(op_array, ce, name, on_this, op_array->filename); if (on_this) { //| GET_ZVAL_PTR FCARG1a, this_addr ZEND_ASSERT(Z_MODE(this_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(this_addr)), Z_OFFSET(this_addr)); #line 14243 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (opline->op1_type == IS_VAR && (op1_info & MAY_BE_INDIRECT) && Z_REG(op1_addr) == ZREG_FP) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 14248 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_NOT_Z_TYPE FCARG1a, IS_INDIRECT, >1 //| GET_Z_PTR FCARG1a, FCARG1a //|1: dasm_put(Dst, 7333, offsetof(zval, u1.v.type), IS_INDIRECT); #line 14251 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } if (op1_info & MAY_BE_REF) { if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 14256 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| ZVAL_DEREF FCARG1a, op1_info if (op1_info & MAY_BE_REF) { dasm_put(Dst, 5095, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 14258 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } if (op1_info & ((MAY_BE_UNDEF|MAY_BE_ANY)- MAY_BE_OBJECT)) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_NOT_ZVAL_TYPE op1_addr, IS_OBJECT, &exit_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT, (ptrdiff_t)(exit_addr)); #line 14269 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_OBJECT, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 14271 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 3265, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT); #line 14272 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 63); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 14274 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 14276 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ADDR FCARG2a, ZSTR_VAL(name) if (IS_SIGNED_32BIT(ZSTR_VAL(name))) { dasm_put(Dst, 712, ((ptrdiff_t)ZSTR_VAL(name))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)ZSTR_VAL(name))), (unsigned int)((((ptrdiff_t)ZSTR_VAL(name)))>>32)); } #line 14278 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_jit_invalid_property_assign, r0 if (MAY_USE_32BIT_ADDR(zend_jit_invalid_property_assign)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_invalid_property_assign)); } else { if (IS_SIGNED_32BIT(zend_jit_invalid_property_assign)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_invalid_property_assign)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_invalid_property_assign)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_property_assign))>>32)); } dasm_put(Dst, 59); } #line 14279 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (RETURN_VALUE_USED(opline)) { //| SET_ZVAL_TYPE_INFO res_addr, IS_NULL ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); #line 14281 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (((opline+1)->op1_type & (IS_VAR|IS_TMP_VAR)) && (val_info & (MAY_BE_REF|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { needs_val_dtor = 1; //| jmp >7 dasm_put(Dst, 3631); #line 14286 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >9 dasm_put(Dst, 3591); #line 14288 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code dasm_put(Dst, 386); #line 14290 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| GET_ZVAL_PTR FCARG1a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 14293 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!prop_info && trace_ce && (trace_ce->ce_flags & ZEND_ACC_IMMUTABLE)) { prop_info = zend_get_known_property_info(op_array, trace_ce, name, on_this, op_array->filename); if (prop_info) { ce = trace_ce; ce_is_instanceof = 0; if (!(op1_info & MAY_BE_CLASS_GUARD)) { if (on_this && JIT_G(current_frame) && TRACE_FRAME_IS_THIS_CLASS_CHECKED(JIT_G(current_frame))) { ZEND_ASSERT(JIT_G(current_frame)->ce == ce); } else if (zend_jit_class_guard(Dst, opline, ce)) { if (on_this && JIT_G(current_frame)) { JIT_G(current_frame)->ce = ce; TRACE_FRAME_SET_THIS_CLASS_CHECKED(JIT_G(current_frame)); } } else { return 0; } if (ssa->var_info && ssa_op->op1_use >= 0) { ssa->var_info[ssa_op->op1_use].type |= MAY_BE_CLASS_GUARD; ssa->var_info[ssa_op->op1_use].ce = ce; ssa->var_info[ssa_op->op1_use].is_instanceof = ce_is_instanceof; } if (ssa->var_info && ssa_op->op1_def >= 0) { ssa->var_info[ssa_op->op1_def].type |= MAY_BE_CLASS_GUARD; ssa->var_info[ssa_op->op1_def].ce = ce; ssa->var_info[ssa_op->op1_def].is_instanceof = ce_is_instanceof; } } } } if (!prop_info) { needs_slow_path = 1; //| mov r0, EX->run_time_cache //| mov r2, aword [r0 + opline->extended_value] //| cmp r2, aword [FCARG1a + offsetof(zend_object, ce)] //| jne >5 dasm_put(Dst, 7785, Dt1(->run_time_cache), opline->extended_value, offsetof(zend_object, ce)); #line 14333 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!ce || ce_is_instanceof || (ce->ce_flags & (ZEND_ACC_HAS_TYPE_HINTS|ZEND_ACC_TRAIT))) { //| mov FCARG2a, aword [r0 + opline->extended_value + sizeof(void*) * 2] dasm_put(Dst, 7291, opline->extended_value + sizeof(void*) * 2); #line 14335 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov r0, aword [r0 + opline->extended_value + sizeof(void*)] //| test r0, r0 //| jl >5 //| IF_TYPE byte [FCARG1a + r0 + 8], IS_UNDEF, >5 //| add FCARG1a, r0 dasm_put(Dst, 7802, opline->extended_value + sizeof(void*), 8, IS_UNDEF); #line 14341 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" prop_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); if (!ce || ce_is_instanceof || (ce->ce_flags & (ZEND_ACC_HAS_TYPE_HINTS|ZEND_ACC_TRAIT))) { //| test FCARG2a, FCARG2a //| jnz >1 //|.cold_code dasm_put(Dst, 7401); #line 14346 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| // value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC); //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 63); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 14349 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| LOAD_ZVAL_ADDR CARG3, val_addr if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(val_addr)) { dasm_put(Dst, 3303, (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 3311, (Z_REG(val_addr))); } } else { ZEND_UNREACHABLE(); } #line 14351 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (RETURN_VALUE_USED(opline)) { //| LOAD_ZVAL_ADDR CARG4, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 4353, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 4358, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 4363, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 4371, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 14353 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| xor CARG4, CARG4 dasm_put(Dst, 4349); #line 14355 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.else //| sub r4, 8 if (RETURN_VALUE_USED(opline)) { //| PUSH_ZVAL_ADDR res_addr, r0 } else { //| push 0 } //| PUSH_ZVAL_ADDR val_addr, r0 //|.endif //| EXT_CALL zend_jit_assign_to_typed_prop, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_to_typed_prop)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_to_typed_prop)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_to_typed_prop)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_to_typed_prop)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_to_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_assign_to_typed_prop))>>32)); } dasm_put(Dst, 59); } #line 14367 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) //| add r4, 8 //|.endif if ((opline+1)->op1_type == IS_CONST) { //| // TODO: ??? //| // if (Z_TYPE_P(value) == orig_type) { //| // CACHE_PTR_EX(cache_slot + 2, NULL); } if (((opline+1)->op1_type & (IS_VAR|IS_TMP_VAR)) && (val_info & (MAY_BE_REF|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { //| jmp >7 dasm_put(Dst, 3631); #line 14381 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp >9 dasm_put(Dst, 3591); #line 14383 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.code dasm_put(Dst, 386); #line 14385 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { prop_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, prop_info->offset); if (!ce || ce_is_instanceof || !(ce->ce_flags & ZEND_ACC_IMMUTABLE) || ce->__get || ce->__set || (prop_info->flags & ZEND_ACC_READONLY)) { // Undefined property with magic __get()/__set() if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_TYPE byte [FCARG1a + prop_info->offset + 8], IS_UNDEF, &exit_addr dasm_put(Dst, 7691, prop_info->offset + 8, IS_UNDEF, (ptrdiff_t)(exit_addr)); #line 14398 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_TYPE byte [FCARG1a + prop_info->offset + 8], IS_UNDEF, >5 dasm_put(Dst, 475, prop_info->offset + 8, IS_UNDEF); #line 14400 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" needs_slow_path = 1; } } if (ZEND_TYPE_IS_SET(prop_info->type)) { uint32_t info = val_info; //| // value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC); //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 14408 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (ce && ce->ce_flags & ZEND_ACC_IMMUTABLE) { //| LOAD_ADDR FCARG2a, prop_info if (IS_SIGNED_32BIT(prop_info)) { dasm_put(Dst, 712, ((ptrdiff_t)prop_info)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)prop_info)), (unsigned int)((((ptrdiff_t)prop_info))>>32)); } #line 14410 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { int prop_info_offset = (((prop_info->offset - (sizeof(zend_object) - sizeof(zval))) / sizeof(zval)) * sizeof(void*)); //| mov r0, aword [FCARG1a + offsetof(zend_object, ce)] //| mov r0, aword [r0 + offsetof(zend_class_entry, properties_info_table)] //| mov FCARG2a, aword[r0 + prop_info_offset] dasm_put(Dst, 7558, offsetof(zend_object, ce), offsetof(zend_class_entry, properties_info_table), prop_info_offset); #line 14417 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ZVAL_ADDR FCARG1a, prop_addr if (Z_MODE(prop_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(prop_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(prop_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(prop_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(prop_addr)))>>32)); } } else if (Z_MODE(prop_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(prop_addr)) { dasm_put(Dst, 2220, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); } else { dasm_put(Dst, 2228, (Z_REG(prop_addr))); } } else { ZEND_UNREACHABLE(); } #line 14419 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| LOAD_ZVAL_ADDR CARG3, val_addr if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(val_addr)) { dasm_put(Dst, 3303, (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 3311, (Z_REG(val_addr))); } } else { ZEND_UNREACHABLE(); } #line 14421 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (RETURN_VALUE_USED(opline)) { //| LOAD_ZVAL_ADDR CARG4, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 4353, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 4358, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 4363, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 4371, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 14423 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| xor CARG4, CARG4 dasm_put(Dst, 4349); #line 14425 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.else //| sub r4, 8 if (RETURN_VALUE_USED(opline)) { //| PUSH_ZVAL_ADDR res_addr, r0 } else { //| push 0 } //| PUSH_ZVAL_ADDR val_addr, r0 //|.endif //| EXT_CALL zend_jit_assign_to_typed_prop, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_to_typed_prop)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_to_typed_prop)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_to_typed_prop)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_to_typed_prop)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_to_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_assign_to_typed_prop))>>32)); } dasm_put(Dst, 59); } #line 14437 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) //| add r4, 8 //|.endif if (info & (MAY_BE_REF|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { info |= MAY_BE_RC1|MAY_BE_RCN; } //| FREE_OP (opline+1)->op1_type, (opline+1)->op1, info, 0, NULL if ((opline+1)->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))); if (((info) & MAY_BE_GUARD) || RC_MAY_BE_1(info)) { if (((info) & MAY_BE_GUARD) || RC_MAY_BE_N(info)) { if (0 && (((info) & MAY_BE_GUARD) || (RC_MAY_BE_N(info) && ((info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((info) & MAY_BE_GUARD) && has_concrete_type((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (NULL && ((info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (NULL) { if (NULL == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(NULL)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)NULL)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)NULL)), (unsigned int)((((ptrdiff_t)NULL))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((info) & MAY_BE_GUARD) || (RC_MAY_BE_N(info) && ((info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((info) & MAY_BE_GUARD) || (RC_MAY_BE_N(info) && ((info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 14447 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!prop_info || !ZEND_TYPE_IS_SET(prop_info->type)) { // value = zend_assign_to_variable(property_val, value, OP_DATA_TYPE, EX_USES_STRICT_TYPES()); if (opline->result_type == IS_UNUSED) { if (!zend_jit_assign_to_variable_call(Dst, opline, prop_addr, prop_addr, -1, -1, (opline+1)->op1_type, val_addr, val_info, res_addr, 0)) { return 0; } } else { if (!zend_jit_assign_to_variable(Dst, opline, prop_addr, prop_addr, -1, -1, (opline+1)->op1_type, val_addr, val_info, res_addr, 0)) { return 0; } } } if (needs_slow_path) { //|.cold_code dasm_put(Dst, 289); #line 14465 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|5: //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 498); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 14467 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // value = zobj->handlers->write_property(zobj, name, value, CACHE_ADDR(opline->extended_value)); //| LOAD_ADDR FCARG2a, name if (IS_SIGNED_32BIT(name)) { dasm_put(Dst, 712, ((ptrdiff_t)name)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)name)), (unsigned int)((((ptrdiff_t)name))>>32)); } #line 14469 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| LOAD_ZVAL_ADDR CARG3, val_addr if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 3293, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(val_addr)) { dasm_put(Dst, 3303, (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 3311, (Z_REG(val_addr))); } } else { ZEND_UNREACHABLE(); } #line 14471 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov CARG4, EX->run_time_cache //| add CARG4, opline->extended_value dasm_put(Dst, 7766, Dt1(->run_time_cache), opline->extended_value); #line 14473 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (RETURN_VALUE_USED(opline)) { //|.if X64WIN //| LOAD_ZVAL_ADDR r0, res_addr //| mov aword A5, r0 //|.else //| LOAD_ZVAL_ADDR CARG5, res_addr if (Z_MODE(res_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(res_addr))) { dasm_put(Dst, 7775, ((ptrdiff_t)Z_ZV(res_addr))); } else { dasm_put(Dst, 7780, (unsigned int)(((ptrdiff_t)Z_ZV(res_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(res_addr)))>>32)); } } else if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(res_addr)) { dasm_put(Dst, 7827, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 7835, (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } #line 14479 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.endif } else { //|.if X64WIN //| mov aword A5, 0 //|.else //| xor CARG5, CARG5 //|.endif dasm_put(Dst, 3977); #line 14486 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.else //| sub r4, 4 if (RETURN_VALUE_USED(opline)) { //| PUSH_ZVAL_ADDR res_addr, r0 } else { //| push 0 } //| mov r0, EX->run_time_cache //| add r0, opline->extended_value //| push r0 //| PUSH_ZVAL_ADDR val_addr, r0 //|.endif //| EXT_CALL zend_jit_assign_obj_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_assign_obj_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_assign_obj_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_assign_obj_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_assign_obj_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_assign_obj_helper)), (unsigned int)((((ptrdiff_t)zend_jit_assign_obj_helper))>>32)); } dasm_put(Dst, 59); } #line 14501 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if not(X64) //| add r4, 4 //|.endif if (val_info & (MAY_BE_REF|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { val_info |= MAY_BE_RC1|MAY_BE_RCN; } //|7: //| // FREE_OP_DATA(); //| FREE_OP (opline+1)->op1_type, (opline+1)->op1, val_info, 0, opline dasm_put(Dst, 4315); if ((opline+1)->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((val_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))); if (((val_info) & MAY_BE_GUARD) || RC_MAY_BE_1(val_info)) { if (((val_info) & MAY_BE_GUARD) || RC_MAY_BE_N(val_info)) { if (0 && (((val_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(val_info) && ((val_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((val_info) & MAY_BE_GUARD) && has_concrete_type((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((val_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((val_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((val_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(val_info) && ((val_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((val_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(val_info) && ((val_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((val_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((val_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 14513 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >9 //|.code dasm_put(Dst, 4046); #line 14515 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (needs_val_dtor) { //|.cold_code dasm_put(Dst, 289); #line 14517 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|7: //| // FREE_OP_DATA(); //| FREE_OP (opline+1)->op1_type, (opline+1)->op1, val_info, 0, opline dasm_put(Dst, 4315); if ((opline+1)->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((val_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))); if (((val_info) & MAY_BE_GUARD) || RC_MAY_BE_1(val_info)) { if (((val_info) & MAY_BE_GUARD) || RC_MAY_BE_N(val_info)) { if (0 && (((val_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(val_info) && ((val_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((val_info) & MAY_BE_GUARD) && has_concrete_type((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((val_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((val_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((val_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(val_info) && ((val_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((val_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(val_info) && ((val_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((val_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((val_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 14520 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >9 //|.code dasm_put(Dst, 4046); #line 14522 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|9: dasm_put(Dst, 4072); #line 14525 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op1_type != IS_UNUSED && !delayed_fetch_this && !op1_indirect) { //| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (1) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (1 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 14527 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (may_throw) { if (!zend_jit_check_exception(Dst)) { return 0; } } return 1; } static int zend_jit_free(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, int may_throw) { zend_jit_addr op1_addr = OP1_ADDR(); if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) { if (may_throw) { //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 14545 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode == ZEND_FE_FREE && (op1_info & (MAY_BE_OBJECT|MAY_BE_REF))) { if (op1_info & MAY_BE_ARRAY) { //| IF_ZVAL_TYPE op1_addr, IS_ARRAY, >7 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 7841, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_ARRAY); #line 14549 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov FCARG1d, dword [FP + opline->op1.var + offsetof(zval, u2.fe_iter_idx)] //| cmp FCARG1d, -1 //| je >7 //| EXT_CALL zend_hash_iterator_del, r0 dasm_put(Dst, 7854, opline->op1.var + offsetof(zval, u2.fe_iter_idx)); if (MAY_USE_32BIT_ADDR(zend_hash_iterator_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_iterator_del)); } else { if (IS_SIGNED_32BIT(zend_hash_iterator_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_iterator_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_iterator_del)), (unsigned int)((((ptrdiff_t)zend_hash_iterator_del))>>32)); } dasm_put(Dst, 59); } #line 14554 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|7: dasm_put(Dst, 4315); #line 14555 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| ZVAL_PTR_DTOR op1_addr, op1_info, 0, 0, opline if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } #line 14557 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (may_throw) { if (!zend_jit_check_exception(Dst)) { return 0; } } } return 1; } static int zend_jit_echo(dasm_State **Dst, const zend_op *opline, uint32_t op1_info) { if (opline->op1_type == IS_CONST) { zval *zv; size_t len; zv = RT_CONSTANT(opline, opline->op1); ZEND_ASSERT(Z_TYPE_P(zv) == IS_STRING); len = Z_STRLEN_P(zv); if (len > 0) { const char *str = Z_STRVAL_P(zv); //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 14581 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| LOAD_ADDR CARG1, str if (IS_SIGNED_32BIT(str)) { dasm_put(Dst, 759, ((ptrdiff_t)str)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)str)), (unsigned int)((((ptrdiff_t)str))>>32)); } #line 14583 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| LOAD_ADDR CARG2, len if (IS_SIGNED_32BIT(len)) { dasm_put(Dst, 712, ((ptrdiff_t)len)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)len)), (unsigned int)((((ptrdiff_t)len))>>32)); } #line 14584 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_write, r0 if (MAY_USE_32BIT_ADDR(zend_write)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_write)); } else { if (IS_SIGNED_32BIT(zend_write)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_write)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_write)), (unsigned int)((((ptrdiff_t)zend_write))>>32)); } dasm_put(Dst, 59); } #line 14585 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| mov aword A2, len //| mov aword A1, str //| EXT_CALL zend_write, r0 //|.endif if (!zend_jit_check_exception(Dst)) { return 0; } } } else { zend_jit_addr op1_addr = OP1_ADDR(); ZEND_ASSERT((op1_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_STRING); //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 14600 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_PTR r0, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 14601 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.if X64 //| lea CARG1, aword [r0 + offsetof(zend_string, val)] //| mov CARG2, aword [r0 + offsetof(zend_string, len)] //| EXT_CALL zend_write, r0 dasm_put(Dst, 7868, (Z_REG(op1_addr)), Z_OFFSET(op1_addr), offsetof(zend_string, val), offsetof(zend_string, len)); if (MAY_USE_32BIT_ADDR(zend_write)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_write)); } else { if (IS_SIGNED_32BIT(zend_write)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_write)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_write)), (unsigned int)((((ptrdiff_t)zend_write))>>32)); } dasm_put(Dst, 59); } #line 14605 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| add r0, offsetof(zend_string, val) //| mov aword A1, r0 //| mov r0, aword [r0 + (offsetof(zend_string, len)-offsetof(zend_string, val))] //| mov aword A2, r0 //| EXT_CALL zend_write, r0 //|.endif if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { //| ZVAL_PTR_DTOR op1_addr, op1_info, 0, 0, opline if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } #line 14614 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!zend_jit_check_exception(Dst)) { return 0; } } return 1; } static int zend_jit_strlen(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, zend_jit_addr res_addr) { if (opline->op1_type == IS_CONST) { zval *zv; size_t len; zv = RT_CONSTANT(opline, opline->op1); ZEND_ASSERT(Z_TYPE_P(zv) == IS_STRING); len = Z_STRLEN_P(zv); //| SET_ZVAL_LVAL res_addr, len if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1665, (Z_REG(res_addr)), len); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3768, (Z_REG(res_addr)), Z_OFFSET(res_addr), len); } #line 14633 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(res_addr) == IS_MEM_ZVAL) { //| SET_ZVAL_TYPE_INFO res_addr, IS_LONG ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); #line 14635 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, MAY_BE_LONG)) { return 0; } } else { ZEND_ASSERT((op1_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_STRING); if (Z_MODE(res_addr) == IS_REG) { //| GET_ZVAL_PTR Ra(Z_REG(res_addr)), op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 14643 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov Ra(Z_REG(res_addr)), aword [Ra(Z_REG(res_addr))+offsetof(zend_string, len)] dasm_put(Dst, 7884, (Z_REG(res_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr), (Z_REG(res_addr)), (Z_REG(res_addr)), offsetof(zend_string, len)); #line 14644 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, MAY_BE_LONG)) { return 0; } } else { //| GET_ZVAL_PTR r0, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 14649 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov r0, aword [r0 + offsetof(zend_string, len)] //| SET_ZVAL_LVAL res_addr, r0 dasm_put(Dst, 7903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr), offsetof(zend_string, len)); if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 2185, (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } #line 14651 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_LONG ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); #line 14652 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| FREE_OP opline->op1_type, opline->op1, op1_info, 0, opline if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 14654 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_count(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, zend_jit_addr res_addr, int may_throw) { if (opline->op1_type == IS_CONST) { zval *zv; zend_long count; zv = RT_CONSTANT(opline, opline->op1); ZEND_ASSERT(Z_TYPE_P(zv) == IS_ARRAY); count = zend_hash_num_elements(Z_ARRVAL_P(zv)); //| SET_ZVAL_LVAL res_addr, count if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1665, (Z_REG(res_addr)), count); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3768, (Z_REG(res_addr)), Z_OFFSET(res_addr), count); } #line 14669 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_MODE(res_addr) == IS_MEM_ZVAL) { //| SET_ZVAL_TYPE_INFO res_addr, IS_LONG ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); #line 14671 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, MAY_BE_LONG)) { return 0; } } else { ZEND_ASSERT((op1_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY); // Note: See the implementation of ZEND_COUNT in Zend/zend_vm_def.h - arrays do not contain IS_UNDEF starting in php 8.1+. if (Z_MODE(res_addr) == IS_REG) { //| GET_ZVAL_PTR Ra(Z_REG(res_addr)), op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 14680 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" // Sign-extend the 32-bit value to a potentially 64-bit zend_long //| mov Rd(Z_REG(res_addr)), dword [Ra(Z_REG(res_addr))+offsetof(HashTable, nNumOfElements)] dasm_put(Dst, 2084, (Z_REG(res_addr)), (Z_REG(res_addr)), offsetof(HashTable, nNumOfElements)); #line 14682 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, MAY_BE_LONG)) { return 0; } } else { //| GET_ZVAL_PTR r0, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5810, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 14687 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" // Sign-extend the 32-bit value to a potentially 64-bit zend_long //| mov eax, dword [r0 + offsetof(HashTable, nNumOfElements)] //| SET_ZVAL_LVAL res_addr, r0 dasm_put(Dst, 5755, offsetof(HashTable, nNumOfElements)); if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 2185, (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } #line 14690 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_LONG ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); #line 14691 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| FREE_OP opline->op1_type, opline->op1, op1_info, 0, opline if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if ((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) { if ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { if (0) { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 276, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); dasm_put(Dst, 63); } else { ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); } } ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 305, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))); if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op1_info)) { if (((op1_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op1_info)) { if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 316); } else { dasm_put(Dst, 321); } } do { if (!((op1_info) & MAY_BE_GUARD) && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { zend_uchar type = concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); if (type == IS_STRING && !ZEND_DEBUG) { if (MAY_USE_32BIT_ADDR(_efree)) { dasm_put(Dst, 46, (ptrdiff_t)(_efree)); } else { if (IS_SIGNED_32BIT(_efree)) { dasm_put(Dst, 49, ((ptrdiff_t)_efree)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); } dasm_put(Dst, 59); } break; } else if (type == IS_ARRAY) { if ((op1_info) & (MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF)) { if (opline && ((op1_info) & (MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_REF))) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_array_destroy)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_array_destroy)); } else { if (IS_SIGNED_32BIT(zend_array_destroy)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_array_destroy)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); } dasm_put(Dst, 59); } } else { if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_array_free)); } else { if (IS_SIGNED_32BIT(zend_jit_array_free)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_array_free)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); } dasm_put(Dst, 59); } } break; } else if (type == IS_OBJECT) { if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_objects_store_del)); } else { if (IS_SIGNED_32BIT(zend_objects_store_del)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_objects_store_del)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); } dasm_put(Dst, 59); } break; } } if (opline) { if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } } if (MAY_USE_32BIT_ADDR(rc_dtor_func)) { dasm_put(Dst, 46, (ptrdiff_t)(rc_dtor_func)); } else { if (IS_SIGNED_32BIT(rc_dtor_func)) { dasm_put(Dst, 49, ((ptrdiff_t)rc_dtor_func)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); } dasm_put(Dst, 59); } } while(0); if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { dasm_put(Dst, 341); } dasm_put(Dst, 346); } if (0 && (((op1_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op1_info) && ((op1_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) { if ((op1_info) & (MAY_BE_REF|MAY_BE_GUARD)) { zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); dasm_put(Dst, 349, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))), Z_OFFSET(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var))+offsetof(zval, u1.v.type), IS_REFERENCE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 291, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_COLLECTABLE); ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); dasm_put(Dst, 362, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); } dasm_put(Dst, 372, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); if (MAY_USE_32BIT_ADDR(gc_possible_root)) { dasm_put(Dst, 46, (ptrdiff_t)(gc_possible_root)); } else { if (IS_SIGNED_32BIT(gc_possible_root)) { dasm_put(Dst, 49, ((ptrdiff_t)gc_possible_root)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); } dasm_put(Dst, 59); } } if (0 && ((op1_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) { dasm_put(Dst, 382); } dasm_put(Dst, 388); } } #line 14693 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (may_throw) { return zend_jit_check_exception(Dst); } return 1; } static int zend_jit_load_this(dasm_State **Dst, uint32_t var) { zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, var); //| mov FCARG1a, aword EX->This.value.ptr //| SET_ZVAL_PTR var_addr, FCARG1a dasm_put(Dst, 525, Dt1(->This.value.ptr)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); #line 14707 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO var_addr, IS_OBJECT_EX dasm_put(Dst, 7578, (Z_REG(var_addr)), Z_OFFSET(var_addr)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); #line 14708 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GC_ADDREF FCARG1a dasm_put(Dst, 7915, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), IS_OBJECT_EX); #line 14709 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_fetch_this(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, bool check_only) { if (!op_array->scope || (op_array->fn_flags & ZEND_ACC_STATIC)) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { if (!JIT_G(current_frame) || !TRACE_FRAME_IS_THIS_CHECKED(JIT_G(current_frame))) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| cmp byte EX->This.u1.v.type, IS_OBJECT //| jne &exit_addr dasm_put(Dst, 1632, Dt1(->This.u1.v.type), IS_OBJECT, (ptrdiff_t)(exit_addr)); #line 14729 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (JIT_G(current_frame)) { TRACE_FRAME_SET_THIS_CHECKED(JIT_G(current_frame)); } } } else { //| cmp byte EX->This.u1.v.type, IS_OBJECT //| jne >1 //|.cold_code dasm_put(Dst, 7927, Dt1(->This.u1.v.type), IS_OBJECT); #line 14739 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 63); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 14741 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp ->invalid_this //|.code dasm_put(Dst, 7938); #line 14743 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (!check_only) { if (!zend_jit_load_this(Dst, opline->result.var)) { return 0; } } return 1; } static int zend_jit_hash_jmp(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, zend_ssa *ssa, HashTable *jumptable, int default_b, const void *default_label, const zend_op *next_opline, zend_jit_trace_info *trace_info) { uint32_t count; Bucket *p; const zend_op *target; int b; int32_t exit_point; const void *exit_addr; //| test r0, r0 dasm_put(Dst, 3529); #line 14765 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (default_label) { //| jz &default_label dasm_put(Dst, 1695, (ptrdiff_t)(default_label)); #line 14767 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (next_opline) { //| jz >3 dasm_put(Dst, 3901); #line 14769 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jz =>default_b dasm_put(Dst, 4533, default_b); #line 14771 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ADDR FCARG1a, jumptable if (IS_SIGNED_32BIT(jumptable)) { dasm_put(Dst, 759, ((ptrdiff_t)jumptable)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)jumptable)), (unsigned int)((((ptrdiff_t)jumptable))>>32)); } #line 14773 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| sub r0, aword [FCARG1a + offsetof(HashTable, arData)] dasm_put(Dst, 7944, offsetof(HashTable, arData)); #line 14774 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (HT_IS_PACKED(jumptable)) { //| mov FCARG1a, (sizeof(zval) / sizeof(void*)) dasm_put(Dst, 759, (sizeof(zval) / sizeof(void*))); #line 14776 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov FCARG1a, (sizeof(Bucket) / sizeof(void*)) dasm_put(Dst, 759, (sizeof(Bucket) / sizeof(void*))); #line 14778 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if X64 //| cqo //|.else //| cdq //|.endif //| idiv FCARG1a //|.if X64 dasm_put(Dst, 7949); #line 14786 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!IS_32BIT(dasm_end)) { //| lea FCARG1a, aword [>4] //| jmp aword [FCARG1a + r0] dasm_put(Dst, 7957); #line 14789 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp aword [r0 + >4] dasm_put(Dst, 7967); #line 14791 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.else //| jmp aword [r0 + >4] //|.endif //|.jmp_table dasm_put(Dst, 7973); #line 14796 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.align aword //|4: dasm_put(Dst, 7975); #line 14798 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (trace_info) { trace_info->jmp_table_size += zend_hash_num_elements(jumptable); } count = jumptable->nNumUsed; p = jumptable->arData; do { if (Z_TYPE(p->val) == IS_UNDEF) { if (default_label) { //| .aword &default_label dasm_put(Dst, 56, (unsigned int)((ptrdiff_t)(default_label)), (unsigned int)((unsigned long long)((ptrdiff_t)(default_label))>>32)); #line 14808 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (next_opline) { //| .aword >3 dasm_put(Dst, 7980); #line 14810 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| .aword =>default_b dasm_put(Dst, 44, default_b); #line 14812 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { target = ZEND_OFFSET_TO_OPLINE(opline, Z_LVAL(p->val)); if (!next_opline) { b = ssa->cfg.map[target - op_array->opcodes]; //| .aword =>b dasm_put(Dst, 44, b); #line 14818 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (next_opline == target) { //| .aword >3 dasm_put(Dst, 7980); #line 14820 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { exit_point = zend_jit_trace_get_exit_point(target, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| .aword &exit_addr dasm_put(Dst, 56, (unsigned int)((ptrdiff_t)(exit_addr)), (unsigned int)((unsigned long long)((ptrdiff_t)(exit_addr))>>32)); #line 14827 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (HT_IS_PACKED(jumptable)) { p = (Bucket*)(((zval*)p)+1); } else { p++; } count--; } while (count); //|.code dasm_put(Dst, 386); #line 14837 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_switch(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, zend_ssa *ssa, zend_jit_trace_rec *trace, zend_jit_trace_info *trace_info) { HashTable *jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2)); const zend_op *next_opline = NULL; if (trace) { ZEND_ASSERT(trace->op == ZEND_JIT_TRACE_VM || trace->op == ZEND_JIT_TRACE_END); ZEND_ASSERT(trace->opline != NULL); next_opline = trace->opline; } if (opline->op1_type == IS_CONST) { zval *zv = RT_CONSTANT(opline, opline->op1); zval *jump_zv = NULL; int b; if (opline->opcode == ZEND_SWITCH_LONG) { if (Z_TYPE_P(zv) == IS_LONG) { jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(zv)); } } else if (opline->opcode == ZEND_SWITCH_STRING) { if (Z_TYPE_P(zv) == IS_STRING) { jump_zv = zend_hash_find_known_hash(jumptable, Z_STR_P(zv)); } } else if (opline->opcode == ZEND_MATCH) { if (Z_TYPE_P(zv) == IS_LONG) { jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(zv)); } else if (Z_TYPE_P(zv) == IS_STRING) { jump_zv = zend_hash_find_known_hash(jumptable, Z_STR_P(zv)); } } else { ZEND_UNREACHABLE(); } if (next_opline) { const zend_op *target; if (jump_zv != NULL) { target = ZEND_OFFSET_TO_OPLINE(opline, Z_LVAL_P(jump_zv)); } else { target = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value); } ZEND_ASSERT(target == next_opline); } else { if (jump_zv != NULL) { b = ssa->cfg.map[ZEND_OFFSET_TO_OPLINE(opline, Z_LVAL_P(jump_zv)) - op_array->opcodes]; } else { b = ssa->cfg.map[ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value) - op_array->opcodes]; } //| jmp =>b dasm_put(Dst, 1542, b); #line 14890 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { zend_ssa_op *ssa_op = &ssa->ops[opline - op_array->opcodes]; uint32_t op1_info = OP1_INFO(); zend_jit_addr op1_addr = OP1_ADDR(); const zend_op *default_opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value); const zend_op *target; int default_b = next_opline ? -1 : ssa->cfg.map[default_opline - op_array->opcodes]; int b; int32_t exit_point; const void *fallback_label = NULL; const void *default_label = NULL; const void *exit_addr; if (next_opline) { if (next_opline != opline + 1) { exit_point = zend_jit_trace_get_exit_point(opline + 1, 0); fallback_label = zend_jit_trace_get_exit_addr(exit_point); if (!fallback_label) { return 0; } } if (next_opline != default_opline) { exit_point = zend_jit_trace_get_exit_point(default_opline, 0); default_label = zend_jit_trace_get_exit_addr(exit_point); if (!default_label) { return 0; } } } if (opline->opcode == ZEND_SWITCH_LONG) { if (op1_info & MAY_BE_LONG) { if (op1_info & MAY_BE_REF) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 14925 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_LVAL ZREG_FCARG2, op1_addr dasm_put(Dst, 349, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG2), (ZREG_FCARG2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG2), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG2 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG2)); } } else { ZEND_UNREACHABLE(); } #line 14926 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 289); #line 14927 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| // ZVAL_DEREF(op) dasm_put(Dst, 63); #line 14929 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (fallback_label) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_REFERENCE, &fallback_label ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE, (ptrdiff_t)(fallback_label)); #line 14931 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_REFERENCE, >3 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3239, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); #line 14933 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| GET_ZVAL_PTR FCARG2a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 7983, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 14935 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (fallback_label) { //| IF_NOT_Z_TYPE FCARG2a + offsetof(zend_reference, val), IS_LONG, &fallback_label dasm_put(Dst, 1633, offsetof(zend_reference, val)+offsetof(zval, u1.v.type), IS_LONG, (ptrdiff_t)(fallback_label)); #line 14937 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_Z_TYPE FCARG2a + offsetof(zend_reference, val), IS_LONG, >3 dasm_put(Dst, 7991, offsetof(zend_reference, val)+offsetof(zval, u1.v.type), IS_LONG); #line 14939 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov FCARG2a, aword [FCARG2a + offsetof(zend_reference, val.value.lval)] //| jmp >2 //|.code dasm_put(Dst, 8000, offsetof(zend_reference, val.value.lval)); #line 14943 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 14944 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_LONG)) { if (fallback_label) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, &fallback_label ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG, (ptrdiff_t)(fallback_label)); #line 14948 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >3 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3239, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 14950 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| GET_ZVAL_LVAL ZREG_FCARG2, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG2), (ZREG_FCARG2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG2), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG2 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG2)); } } else { ZEND_UNREACHABLE(); } #line 14953 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (HT_IS_PACKED(jumptable)) { uint32_t count = jumptable->nNumUsed; zval *zv = jumptable->arPacked; //| cmp FCARG2a, jumptable->nNumUsed dasm_put(Dst, 8010, jumptable->nNumUsed); #line 14959 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (default_label) { //| jae &default_label dasm_put(Dst, 1646, (ptrdiff_t)(default_label)); #line 14961 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (next_opline) { //| jae >3 dasm_put(Dst, 8016); #line 14963 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jae =>default_b dasm_put(Dst, 4655, default_b); #line 14965 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.if X64 if (!IS_32BIT(dasm_end)) { //| lea r0, aword [>4] //| jmp aword [r0 + FCARG2a * 8] dasm_put(Dst, 8021); #line 14970 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp aword [FCARG2a * 8 + >4] dasm_put(Dst, 8032); #line 14972 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.else //| jmp aword [FCARG2a * 4 + >4] //|.endif //|.jmp_table dasm_put(Dst, 7973); #line 14977 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.align aword //|4: dasm_put(Dst, 7975); #line 14979 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (trace_info) { trace_info->jmp_table_size += count; } do { if (Z_TYPE_P(zv) == IS_UNDEF) { if (default_label) { //| .aword &default_label dasm_put(Dst, 56, (unsigned int)((ptrdiff_t)(default_label)), (unsigned int)((unsigned long long)((ptrdiff_t)(default_label))>>32)); #line 14986 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (next_opline) { //| .aword >3 dasm_put(Dst, 7980); #line 14988 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| .aword =>default_b dasm_put(Dst, 44, default_b); #line 14990 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { target = ZEND_OFFSET_TO_OPLINE(opline, Z_LVAL_P(zv)); if (!next_opline) { b = ssa->cfg.map[target - op_array->opcodes]; //| .aword =>b dasm_put(Dst, 44, b); #line 14996 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (next_opline == target) { //| .aword >3 dasm_put(Dst, 7980); #line 14998 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { exit_point = zend_jit_trace_get_exit_point(target, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| .aword &exit_addr dasm_put(Dst, 56, (unsigned int)((ptrdiff_t)(exit_addr)), (unsigned int)((unsigned long long)((ptrdiff_t)(exit_addr))>>32)); #line 15005 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } zv++; count--; } while (count); //|.code dasm_put(Dst, 386); #line 15011 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|3: dasm_put(Dst, 346); #line 15012 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| LOAD_ADDR FCARG1a, jumptable if (IS_SIGNED_32BIT(jumptable)) { dasm_put(Dst, 759, ((ptrdiff_t)jumptable)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)jumptable)), (unsigned int)((((ptrdiff_t)jumptable))>>32)); } #line 15014 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_hash_index_find, r0 if (MAY_USE_32BIT_ADDR(zend_hash_index_find)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_index_find)); } else { if (IS_SIGNED_32BIT(zend_hash_index_find)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_index_find)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_index_find)), (unsigned int)((((ptrdiff_t)zend_hash_index_find))>>32)); } dasm_put(Dst, 59); } #line 15015 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_hash_jmp(Dst, opline, op_array, ssa, jumptable, default_b, default_label, next_opline, trace_info)) { return 0; } //|3: dasm_put(Dst, 346); #line 15019 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } else if (opline->opcode == ZEND_SWITCH_STRING) { if (op1_info & MAY_BE_STRING) { if (op1_info & MAY_BE_REF) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_STRING, >1 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 15025 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_PTR FCARG2a, op1_addr dasm_put(Dst, 349, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 15026 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.cold_code dasm_put(Dst, 8040, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 15027 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: //| // ZVAL_DEREF(op) dasm_put(Dst, 63); #line 15029 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (fallback_label) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_REFERENCE, &fallback_label ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE, (ptrdiff_t)(fallback_label)); #line 15031 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_REFERENCE, >3 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3239, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); #line 15033 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| GET_ZVAL_PTR FCARG2a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 7983, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 15035 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (fallback_label) { //| IF_NOT_Z_TYPE FCARG2a + offsetof(zend_reference, val), IS_STRING, &fallback_label dasm_put(Dst, 1633, offsetof(zend_reference, val)+offsetof(zval, u1.v.type), IS_STRING, (ptrdiff_t)(fallback_label)); #line 15037 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_Z_TYPE FCARG2a + offsetof(zend_reference, val), IS_STRING, >3 dasm_put(Dst, 7991, offsetof(zend_reference, val)+offsetof(zval, u1.v.type), IS_STRING); #line 15039 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| mov FCARG2a, aword [FCARG2a + offsetof(zend_reference, val.value.ptr)] //| jmp >2 //|.code dasm_put(Dst, 8000, offsetof(zend_reference, val.value.ptr)); #line 15043 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|2: dasm_put(Dst, 1944); #line 15044 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_STRING)) { if (fallback_label) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_STRING, &fallback_label ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING, (ptrdiff_t)(fallback_label)); #line 15048 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_STRING, >3 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3239, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING); #line 15050 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| GET_ZVAL_PTR FCARG2a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 7983, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 15053 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| LOAD_ADDR FCARG1a, jumptable if (IS_SIGNED_32BIT(jumptable)) { dasm_put(Dst, 759, ((ptrdiff_t)jumptable)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)jumptable)), (unsigned int)((((ptrdiff_t)jumptable))>>32)); } #line 15055 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_hash_find, r0 if (MAY_USE_32BIT_ADDR(zend_hash_find)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_find)); } else { if (IS_SIGNED_32BIT(zend_hash_find)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_find)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_find)), (unsigned int)((((ptrdiff_t)zend_hash_find))>>32)); } dasm_put(Dst, 59); } #line 15056 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_hash_jmp(Dst, opline, op_array, ssa, jumptable, default_b, default_label, next_opline, trace_info)) { return 0; } //|3: dasm_put(Dst, 346); #line 15060 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (opline->opcode == ZEND_MATCH) { if (op1_info & (MAY_BE_LONG|MAY_BE_STRING)) { if (op1_info & MAY_BE_REF) { //| LOAD_ZVAL_ADDR FCARG2a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 712, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2255, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2263, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 15065 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| ZVAL_DEREF FCARG2a, op1_info if (op1_info & MAY_BE_REF) { dasm_put(Dst, 5113, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 15066 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG2, 0); } //| LOAD_ADDR FCARG1a, jumptable if (IS_SIGNED_32BIT(jumptable)) { dasm_put(Dst, 759, ((ptrdiff_t)jumptable)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)jumptable)), (unsigned int)((((ptrdiff_t)jumptable))>>32)); } #line 15069 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_LONG) { if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_LONG)) { if (op1_info & MAY_BE_STRING) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >5 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5009, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 15073 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (op1_info & MAY_BE_UNDEF) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >6 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 15075 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (default_label) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, &default_label ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG, (ptrdiff_t)(default_label)); #line 15077 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (next_opline) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >3 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3239, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); #line 15079 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, =>default_b ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 8049, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG, default_b); #line 15081 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| GET_ZVAL_LVAL ZREG_FCARG2, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG2), (ZREG_FCARG2)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG2), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG2 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG2)); } } else { ZEND_UNREACHABLE(); } #line 15084 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_hash_index_find, r0 if (MAY_USE_32BIT_ADDR(zend_hash_index_find)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_index_find)); } else { if (IS_SIGNED_32BIT(zend_hash_index_find)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_index_find)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_index_find)), (unsigned int)((((ptrdiff_t)zend_hash_index_find))>>32)); } dasm_put(Dst, 59); } #line 15085 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_STRING) { //| jmp >2 dasm_put(Dst, 3636); #line 15087 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op1_info & MAY_BE_STRING) { //|5: dasm_put(Dst, 498); #line 15091 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_STRING))) { if (op1_info & MAY_BE_UNDEF) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_STRING, >6 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING); #line 15094 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (default_label) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_STRING, &default_label ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING, (ptrdiff_t)(default_label)); #line 15096 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (next_opline) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_STRING, >3 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3239, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING); #line 15098 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_STRING, =>default_b ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 8049, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING, default_b); #line 15100 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| GET_ZVAL_PTR FCARG2a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 15103 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_hash_find, r0 dasm_put(Dst, 7983, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); if (MAY_USE_32BIT_ADDR(zend_hash_find)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_find)); } else { if (IS_SIGNED_32BIT(zend_hash_find)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_find)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_find)), (unsigned int)((((ptrdiff_t)zend_hash_find))>>32)); } dasm_put(Dst, 59); } #line 15104 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|2: dasm_put(Dst, 1944); #line 15106 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_hash_jmp(Dst, opline, op_array, ssa, jumptable, default_b, default_label, next_opline, trace_info)) { return 0; } } if (op1_info & MAY_BE_UNDEF) { //|6: dasm_put(Dst, 3290); #line 15112 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & (MAY_BE_ANY-(MAY_BE_LONG|MAY_BE_STRING))) { if (default_label) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_UNDEF, &default_label ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF, (ptrdiff_t)(default_label)); #line 15115 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (next_opline) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_UNDEF, >3 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3239, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); #line 15117 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_ZVAL_TYPE op1_addr, IS_UNDEF, =>default_b ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 8049, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF, default_b); #line 15119 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| // zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(CV_DEF_OF(EX_VAR_TO_NUM(opline->op1.var)))); //| SET_EX_OPLINE opline, r0 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 15123 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1d, opline->op1.var //| EXT_CALL zend_jit_undefined_op_helper, r0 dasm_put(Dst, 2217, opline->op1.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 59); } #line 15125 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_check_exception_undef_result(Dst, opline)) { return 0; } } if (default_label) { //| jmp &default_label dasm_put(Dst, 150, (ptrdiff_t)(default_label)); #line 15131 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (next_opline) { //| jmp >3 dasm_put(Dst, 3865); #line 15133 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jmp =>default_b dasm_put(Dst, 1542, default_b); #line 15135 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|3: dasm_put(Dst, 346); #line 15137 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } } return 1; } static bool zend_jit_verify_return_type(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info) { zend_arg_info *arg_info = &op_array->arg_info[-1]; ZEND_ASSERT(ZEND_TYPE_IS_SET(arg_info->type)); zend_jit_addr op1_addr = OP1_ADDR(); bool needs_slow_check = 1; bool slow_check_in_cold = 1; uint32_t type_mask = ZEND_TYPE_PURE_MASK(arg_info->type) & MAY_BE_ANY; if (type_mask == 0) { slow_check_in_cold = 0; } else { if (((op1_info & MAY_BE_ANY) & type_mask) == 0) { slow_check_in_cold = 0; } else if (((op1_info & MAY_BE_ANY) | type_mask) == type_mask) { needs_slow_check = 0; } else if (is_power_of_two(type_mask)) { uint32_t type_code = concrete_type(type_mask); //| IF_NOT_ZVAL_TYPE op1_addr, type_code, >6 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3252, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), type_code); #line 15163 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| mov edx, 1 //| GET_ZVAL_TYPE cl, op1_addr dasm_put(Dst, 8061); ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 15166 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| shl edx, cl //| test edx, type_mask //| je >6 dasm_put(Dst, 8067, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.v.type), type_mask); #line 15169 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (needs_slow_check) { if (slow_check_in_cold) { //|.cold_code dasm_put(Dst, 289); #line 15174 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|6: dasm_put(Dst, 3290); #line 15175 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| SET_EX_OPLINE opline, r1 if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 8085, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 15177 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_UNDEF) { //| IF_NOT_ZVAL_TYPE op1_addr, IS_UNDEF, >7 ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 15179 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG1a, opline->op1.var //| EXT_CALL zend_jit_undefined_op_helper, FCARG2a dasm_put(Dst, 8094, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF, opline->op1.var); if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_undefined_op_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { dasm_put(Dst, 712, ((ptrdiff_t)zend_jit_undefined_op_helper)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); } dasm_put(Dst, 8111); } #line 15181 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test r0, r0 //| jz ->exception_handler //| LOAD_ADDR_ZTS FCARG1a, executor_globals, uninitialized_zval dasm_put(Dst, 5798); if (IS_SIGNED_32BIT(&executor_globals.uninitialized_zval)) { dasm_put(Dst, 759, ((ptrdiff_t)&executor_globals.uninitialized_zval)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)&executor_globals.uninitialized_zval)), (unsigned int)((((ptrdiff_t)&executor_globals.uninitialized_zval))>>32)); } #line 15184 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >8 dasm_put(Dst, 3676); #line 15185 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|7: //| LOAD_ZVAL_ADDR FCARG1a, op1_addr dasm_put(Dst, 4315); if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 15188 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|8: //| mov FCARG2a, EX->func //|.if X64 //| LOAD_ADDR CARG3, (ptrdiff_t)arg_info dasm_put(Dst, 8115, Dt1(->func)); if (IS_SIGNED_32BIT((ptrdiff_t)arg_info)) { dasm_put(Dst, 3293, ((ptrdiff_t)(ptrdiff_t)arg_info)); } else { dasm_put(Dst, 3298, (unsigned int)(((ptrdiff_t)(ptrdiff_t)arg_info)), (unsigned int)((((ptrdiff_t)(ptrdiff_t)arg_info))>>32)); } #line 15192 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov r0, EX->run_time_cache //| lea CARG4, aword [r0+opline->op2.num] //| EXT_CALL zend_jit_verify_return_slow, r0 dasm_put(Dst, 8122, Dt1(->run_time_cache), opline->op2.num); if (MAY_USE_32BIT_ADDR(zend_jit_verify_return_slow)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_verify_return_slow)); } else { if (IS_SIGNED_32BIT(zend_jit_verify_return_slow)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_verify_return_slow)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_verify_return_slow)), (unsigned int)((((ptrdiff_t)zend_jit_verify_return_slow))>>32)); } dasm_put(Dst, 59); } #line 15195 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|.else //| sub r4, 8 //| mov r0, EX->run_time_cache //| add r0, opline->op2.num //| push r0 //| push (ptrdiff_t)arg_info //| EXT_CALL zend_jit_verify_return_slow, r0 //| add r4, 8 //|.endif if (!zend_jit_check_exception(Dst)) { return 0; } if (slow_check_in_cold) { //| jmp >9 //|.code dasm_put(Dst, 4046); #line 15210 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //|9: dasm_put(Dst, 4072); #line 15213 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_isset_isempty_cv(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); // TODO: support for empty() ??? ZEND_ASSERT(!(opline->extended_value & ZEND_ISEMPTY)); if (op1_info & MAY_BE_REF) { if (Z_MODE(op1_addr) != IS_MEM_ZVAL || Z_REG(op1_addr) != ZREG_FCARG1 || Z_OFFSET(op1_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, op1_addr if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(op1_addr)) { dasm_put(Dst, 2220, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 2228, (Z_REG(op1_addr))); } } else { ZEND_UNREACHABLE(); } #line 15226 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); } //| ZVAL_DEREF FCARG1a, op1_info if (op1_info & MAY_BE_REF) { dasm_put(Dst, 5095, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); } #line 15229 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|1: dasm_put(Dst, 63); #line 15230 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!(op1_info & (MAY_BE_UNDEF|MAY_BE_NULL))) { if (exit_addr) { ZEND_ASSERT(smart_branch_opcode == ZEND_JMPZ); } else if (smart_branch_opcode) { if (smart_branch_opcode == ZEND_JMPNZ) { //| jmp =>target_label dasm_put(Dst, 1542, target_label); #line 15238 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); #line 15241 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (!(op1_info & (MAY_BE_ANY - MAY_BE_NULL))) { if (exit_addr) { ZEND_ASSERT(smart_branch_opcode == ZEND_JMPNZ); } else if (smart_branch_opcode) { if (smart_branch_opcode != ZEND_JMPNZ) { //| jmp =>target_label dasm_put(Dst, 1542, target_label); #line 15248 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); #line 15251 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); //| cmp byte [Ra(Z_REG(op1_addr))+Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type)], IS_NULL dasm_put(Dst, 5155, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_NULL); #line 15255 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { if (smart_branch_opcode == ZEND_JMPNZ) { //| jg &exit_addr dasm_put(Dst, 3738, (ptrdiff_t)(exit_addr)); #line 15258 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jle &exit_addr dasm_put(Dst, 3734, (ptrdiff_t)(exit_addr)); #line 15260 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (smart_branch_opcode) { if (smart_branch_opcode == ZEND_JMPZ) { //| jle =>target_label dasm_put(Dst, 4537, target_label); #line 15264 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (smart_branch_opcode == ZEND_JMPNZ) { //| jg =>target_label dasm_put(Dst, 4557, target_label); #line 15266 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } } else { //| setg al //| movzx eax, al //| lea eax, [eax + IS_FALSE] //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 8131, IS_FALSE); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 15274 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } return 1; } static int zend_jit_fe_reset(dasm_State **Dst, const zend_op *opline, uint32_t op1_info) { zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); if (opline->op1_type == IS_CONST) { zval *zv = RT_CONSTANT(opline, opline->op1); //| ZVAL_COPY_CONST res_addr, MAY_BE_ANY, MAY_BE_ANY, zv, ZREG_R0 if (Z_TYPE_P(zv) > IS_TRUE) { if (Z_TYPE_P(zv) == IS_DOUBLE) { zend_reg dst_reg = (Z_MODE(res_addr) == IS_REG) ? Z_REG(res_addr) : ZREG_XMM0; if (Z_DVAL_P(zv) == 0.0 && !is_signed(Z_DVAL_P(zv))) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } else if (!IS_SIGNED_32BIT(zv)) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(((uintptr_t)zv)), (unsigned int)((((uintptr_t)zv))>>32)); if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); } else { dasm_put(Dst, 1907, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); } } else { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); } else { dasm_put(Dst, 1867, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); } } if (Z_MODE(res_addr) == IS_REG) { if (dst_reg != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_TYPE_P(zv) == IS_LONG && MAY_BE_ANY == MAY_BE_DOUBLE) { zend_reg dst_reg = (Z_MODE(res_addr) == IS_REG) ? Z_REG(res_addr) : ZREG_XMM0; if (Z_LVAL_P(zv) == 0) { if (CAN_USE_AVX()) { dasm_put(Dst, 2614, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 2626, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R0), Z_LVAL_P(zv)); } if (CAN_USE_AVX()) { dasm_put(Dst, 2635, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (ZREG_R0)); } else { dasm_put(Dst, 2659, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (ZREG_R0)); } } if (Z_MODE(res_addr) == IS_REG) { if (dst_reg != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_LVAL_P(zv) == 0 && Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); } else { dasm_put(Dst, 1658, (ZREG_R0), (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R0), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(zv)); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 3768, (Z_REG(res_addr)), Z_OFFSET(res_addr), Z_LVAL_P(zv)); } } } } if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if (MAY_BE_ANY == MAY_BE_DOUBLE) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != MAY_BE_DOUBLE) { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); } } else if (((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (1<<Z_TYPE_P(zv))) || (MAY_BE_ANY & (MAY_BE_STRING|MAY_BE_ARRAY)) != 0) { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), Z_TYPE_INFO_P(zv)); } } #line 15288 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (Z_REFCOUNTED_P(zv)) { //| ADDREF_CONST zv, r0 if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { dasm_put(Dst, 6246, (unsigned int)(((uintptr_t)Z_LVAL_P(zv))), (unsigned int)((((uintptr_t)Z_LVAL_P(zv)))>>32)); } else { dasm_put(Dst, 3792, Z_LVAL_P(zv)); } #line 15290 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { zend_jit_addr op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var); //| // ZVAL_COPY(res, value); //| ZVAL_COPY_VALUE res_addr, -1, op1_addr, op1_info, ZREG_R0, ZREG_FCARG1 if (op1_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(op1_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(op1_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(op1_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else if (Z_MODE(op1_addr) == IS_REG) { if (ZREG_FCARG1 != Z_REG(op1_addr)) { dasm_put(Dst, 1682, (Z_REG(op1_addr)), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_FCARG1), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_FCARG1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((op1_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(op1_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(op1_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(op1_addr) != IS_REG || Z_REG(res_addr) != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(op1_addr) != IS_REG || ZREG_XMM0 != Z_REG(op1_addr)) { if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(op1_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); } } else if (Z_MODE(op1_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(op1_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_FCARG1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_FCARG1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((op1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(op1_info & MAY_BE_GUARD) && has_concrete_type(op1_info & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((-1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(op1_info); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 15296 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op1_type == IS_CV) { //| TRY_ADDREF op1_info, ah, FCARG1a if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (op1_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 2287); } dasm_put(Dst, 8141); } #line 15298 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| // Z_FE_POS_P(res) = 0; //| mov dword [FP + opline->result.var + offsetof(zval, u2.fe_pos)], 0 dasm_put(Dst, 8147, opline->result.var + offsetof(zval, u2.fe_pos)); #line 15302 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_fe_fetch(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, uint32_t op2_info, unsigned int target_label, zend_uchar exit_opcode, const void *exit_addr) { zend_jit_addr op1_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var); if (!MAY_BE_HASH(op1_info) && !MAY_BE_PACKED(op1_info)) { /* empty array */ if (exit_addr) { if (exit_opcode == ZEND_JMP) { //| jmp &exit_addr dasm_put(Dst, 150, (ptrdiff_t)(exit_addr)); #line 15315 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| jmp =>target_label dasm_put(Dst, 1542, target_label); #line 15318 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } //| // array = EX_VAR(opline->op1.var); //| // fe_ht = Z_ARRVAL_P(array); //| GET_ZVAL_PTR FCARG1a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); #line 15325 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (op1_info & MAY_BE_PACKED_GUARD) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_PACKED_GUARD); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } if (op1_info & MAY_BE_ARRAY_PACKED) { //| test dword [FCARG1a + offsetof(zend_array, u.flags)], HASH_FLAG_PACKED //| jz &exit_addr dasm_put(Dst, 1690, offsetof(zend_array, u.flags), HASH_FLAG_PACKED, (ptrdiff_t)(exit_addr)); #line 15336 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| test dword [FCARG1a + offsetof(zend_array, u.flags)], HASH_FLAG_PACKED //| jnz &exit_addr dasm_put(Dst, 1699, offsetof(zend_array, u.flags), HASH_FLAG_PACKED, (ptrdiff_t)(exit_addr)); #line 15339 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } //| // pos = Z_FE_POS_P(array); //| mov eax, dword [FP + opline->op1.var + offsetof(zval, u2.fe_pos)] dasm_put(Dst, 8156, opline->op1.var + offsetof(zval, u2.fe_pos)); #line 15344 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (MAY_BE_HASH(op1_info)) { if (MAY_BE_PACKED(op1_info)) { //| test dword [FCARG1a + offsetof(zend_array, u.flags)], HASH_FLAG_PACKED //| jnz >2 dasm_put(Dst, 8161, offsetof(zend_array, u.flags), HASH_FLAG_PACKED); #line 15349 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // p = fe_ht->arData + pos; //|.if X64 ZEND_ASSERT(sizeof(Bucket) == 32); //| mov FCARG2d, eax //| shl FCARG2a, 5 //|.else //| imul FCARG2a, r0, sizeof(Bucket) //|.endif //| add FCARG2a, aword [FCARG1a + offsetof(zend_array, arData)] //|1: //| // if (UNEXPECTED(pos >= fe_ht->nNumUsed)) { //| cmp dword [FCARG1a + offsetof(zend_array, nNumUsed)], eax //| // ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); //| // ZEND_VM_CONTINUE(); dasm_put(Dst, 8171, offsetof(zend_array, arData), offsetof(zend_array, nNumUsed)); #line 15365 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { if (exit_opcode == ZEND_JMP) { //| jbe &exit_addr dasm_put(Dst, 3544, (ptrdiff_t)(exit_addr)); #line 15368 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jbe >3 dasm_put(Dst, 8187); #line 15370 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| jbe =>target_label dasm_put(Dst, 4597, target_label); #line 15373 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // pos++; //| add eax, 1 //| // value_type = Z_TYPE_INFO_P(value); //| // if (EXPECTED(value_type != IS_UNDEF)) { dasm_put(Dst, 8192); #line 15378 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!exit_addr || exit_opcode == ZEND_JMP) { //| IF_NOT_Z_TYPE FCARG2a, IS_UNDEF, >3 dasm_put(Dst, 7991, offsetof(zval, u1.v.type), IS_UNDEF); #line 15380 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_Z_TYPE FCARG2a, IS_UNDEF, &exit_addr dasm_put(Dst, 1633, offsetof(zval, u1.v.type), IS_UNDEF, (ptrdiff_t)(exit_addr)); #line 15382 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // p++; //| add FCARG2a, sizeof(Bucket) //| jmp <1 dasm_put(Dst, 8196, sizeof(Bucket)); #line 15386 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (MAY_BE_PACKED(op1_info)) { //|2: dasm_put(Dst, 1944); #line 15388 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (MAY_BE_PACKED(op1_info)) { //| // p = fe_ht->arPacked + pos; ZEND_ASSERT(sizeof(zval) == 16); //| mov FCARG2d, eax //| shl FCARG2a, 4 //| add FCARG2a, aword [FCARG1a + offsetof(zend_array, arPacked)] //|1: //| // if (UNEXPECTED(pos >= fe_ht->nNumUsed)) { //| cmp dword [FCARG1a + offsetof(zend_array, nNumUsed)], eax //| // ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); //| // ZEND_VM_CONTINUE(); dasm_put(Dst, 8205, offsetof(zend_array, arPacked), offsetof(zend_array, nNumUsed)); #line 15401 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { if (exit_opcode == ZEND_JMP) { //| jbe &exit_addr dasm_put(Dst, 3544, (ptrdiff_t)(exit_addr)); #line 15404 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jbe >4 dasm_put(Dst, 8221); #line 15406 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| jbe =>target_label dasm_put(Dst, 4597, target_label); #line 15409 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // pos++; //| add eax, 1 //| // value_type = Z_TYPE_INFO_P(value); //| // if (EXPECTED(value_type != IS_UNDEF)) { dasm_put(Dst, 8192); #line 15414 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!exit_addr || exit_opcode == ZEND_JMP) { //| IF_NOT_Z_TYPE FCARG2a, IS_UNDEF, >4 dasm_put(Dst, 8226, offsetof(zval, u1.v.type), IS_UNDEF); #line 15416 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| IF_NOT_Z_TYPE FCARG2a, IS_UNDEF, &exit_addr dasm_put(Dst, 1633, offsetof(zval, u1.v.type), IS_UNDEF, (ptrdiff_t)(exit_addr)); #line 15418 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| // p++; //| add FCARG2a, sizeof(zval) //| jmp <1 dasm_put(Dst, 8196, sizeof(zval)); #line 15422 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (!exit_addr || exit_opcode == ZEND_JMP) { zend_jit_addr val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG2, 0); zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var); uint32_t val_info; if (RETURN_VALUE_USED(opline)) { zend_jit_addr res_addr = RES_ADDR(); if (MAY_BE_HASH(op1_info)) { //|3: //| // Z_FE_POS_P(array) = pos + 1; //| mov dword [FP + opline->op1.var + offsetof(zval, u2.fe_pos)], eax dasm_put(Dst, 8235, opline->op1.var + offsetof(zval, u2.fe_pos)); #line 15437 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((op1_info & MAY_BE_ARRAY_KEY_LONG) && (op1_info & MAY_BE_ARRAY_KEY_STRING)) { //| // if (!p->key) { //| cmp aword [FCARG2a + offsetof(Bucket, key)], 0 //| jz >2 dasm_put(Dst, 8242, offsetof(Bucket, key)); #line 15443 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (op1_info & MAY_BE_ARRAY_KEY_STRING) { //| // ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key); //| mov r0, aword [FCARG2a + offsetof(Bucket, key)] //| SET_ZVAL_PTR res_addr, r0 dasm_put(Dst, 8252, offsetof(Bucket, key)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 15448 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| test dword [r0 + offsetof(zend_refcounted, gc.u.type_info)], IS_STR_INTERNED //| jz >1 //| SET_ZVAL_TYPE_INFO res_addr, IS_STRING dasm_put(Dst, 8257, (Z_REG(res_addr)), Z_OFFSET(res_addr), offsetof(zend_refcounted, gc.u.type_info), IS_STR_INTERNED); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 15451 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| jmp >3 //|1: //| GC_ADDREF r0 //| SET_ZVAL_TYPE_INFO res_addr, IS_STRING_EX dasm_put(Dst, 8274, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_STRING); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_STRING_EX); #line 15455 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((op1_info & MAY_BE_ARRAY_KEY_LONG) || MAY_BE_PACKED(op1_info)) { //| jmp >3 //|2: dasm_put(Dst, 3918); #line 15459 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (op1_info & MAY_BE_ARRAY_KEY_LONG) { //| // ZVAL_LONG(EX_VAR(opline->result.var), p->h); //| mov r0, aword [FCARG2a + offsetof(Bucket, h)] //| SET_ZVAL_LVAL res_addr, r0 dasm_put(Dst, 8252, offsetof(Bucket, h)); if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 2185, (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } #line 15465 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_LONG ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); #line 15466 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (MAY_BE_PACKED(op1_info)) { //| jmp >3 dasm_put(Dst, 3865); #line 15468 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } } if (MAY_BE_PACKED(op1_info)) { //|4: //| // Z_FE_POS_P(array) = pos + 1; //| mov dword [FP + opline->op1.var + offsetof(zval, u2.fe_pos)], eax //| sub r0, 1 //| SET_ZVAL_LVAL res_addr, r0 dasm_put(Dst, 8292, opline->op1.var + offsetof(zval, u2.fe_pos)); if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 2185, (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2191, (Z_REG(res_addr)), Z_OFFSET(res_addr)); } #line 15477 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_LONG ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); #line 15478 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|3: dasm_put(Dst, 346); #line 15480 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //|3: //|4: //| // Z_FE_POS_P(array) = pos + 1; //| mov dword [FP + opline->op1.var + offsetof(zval, u2.fe_pos)], eax dasm_put(Dst, 8303, opline->op1.var + offsetof(zval, u2.fe_pos)); #line 15485 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } val_info = ((op1_info & MAY_BE_ARRAY_OF_ANY) >> MAY_BE_ARRAY_SHIFT); if (val_info & MAY_BE_ARRAY) { val_info |= MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; } if (op1_info & MAY_BE_ARRAY_OF_REF) { val_info |= MAY_BE_REF | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; } else if (val_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { val_info |= MAY_BE_RC1 | MAY_BE_RCN; } if (opline->op2_type == IS_CV) { //| // zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES()); if (!zend_jit_assign_to_variable(Dst, opline, var_addr, var_addr, op2_info, -1, IS_CV, val_addr, val_info, 0, 1)) { return 0; } } else { //| // ZVAL_COPY(res, value); //| ZVAL_COPY_VALUE var_addr, -1, val_addr, val_info, ZREG_R0, ZREG_FCARG1 if (val_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((val_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(var_addr) != IS_REG || Z_REG(var_addr) != Z_REG(val_addr)) { if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(val_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(var_addr)), (Z_REG(var_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (Z_REG(var_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(var_addr)), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(var_addr)), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (Z_REG(var_addr) != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (Z_REG(var_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(val_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_FCARG1), (ZREG_FCARG1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { dasm_put(Dst, 1658, (ZREG_FCARG1), (unsigned int)(Z_LVAL_P(Z_ZV(val_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(val_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(val_addr))); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else if (Z_MODE(val_addr) == IS_REG) { if (ZREG_FCARG1 != Z_REG(val_addr)) { dasm_put(Dst, 1682, (Z_REG(val_addr)), (ZREG_FCARG1)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(var_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_FCARG1), (Z_REG(var_addr))); } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_FCARG1), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else if ((val_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(val_addr) == IS_REG) { if (Z_MODE(var_addr) == IS_REG) { if (Z_REG(val_addr) != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } else if (Z_MODE(var_addr) == IS_REG) { if (Z_MODE(val_addr) != IS_REG || Z_REG(var_addr) != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(var_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(var_addr)-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(val_addr) != IS_REG || ZREG_XMM0 != Z_REG(val_addr)) { if (Z_MODE(val_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(val_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); } } else if (Z_MODE(val_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(var_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(var_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } } } else if (!(val_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_FCARG1), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_FCARG1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_FCARG1), (Z_REG(var_addr)), Z_OFFSET(var_addr)); } } if ((val_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(val_info & MAY_BE_GUARD) && has_concrete_type(val_info & MAY_BE_ANY)) { if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if ((-1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (val_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(val_info); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info)); } #line 15506 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| TRY_ADDREF val_info, ah, FCARG1a if (val_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (val_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 2287); } dasm_put(Dst, 8141); } #line 15507 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //|3: //|4: dasm_put(Dst, 8312); #line 15511 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_fetch_constant(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, zend_ssa *ssa, const zend_ssa_op *ssa_op, zend_jit_addr res_addr) { zval *zv = RT_CONSTANT(opline, opline->op2) + 1; zend_jit_addr const_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0); uint32_t res_info = RES_INFO(); //| // c = CACHED_PTR(opline->extended_value); //| mov FCARG1a, EX->run_time_cache //| mov r0, aword [FCARG1a + opline->extended_value] //| // if (c != NULL) //| test r0, r0 //| jz >9 dasm_put(Dst, 8317, Dt1(->run_time_cache), opline->extended_value); #line 15533 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (!zend_jit_is_persistent_constant(zv, opline->op1.num)) { //| // if (!IS_SPECIAL_CACHE_VAL(c)) //| test r0, CACHE_SPECIAL //| jnz >9 dasm_put(Dst, 8333, CACHE_SPECIAL); #line 15537 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|8: dasm_put(Dst, 4117); #line 15539 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if ((res_info & MAY_BE_GUARD) && JIT_G(current_frame)) { zend_jit_trace_stack *stack = JIT_G(current_frame)->stack; uint32_t old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); int32_t exit_point; const void *exit_addr = NULL; SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_COPY_GPR0); exit_point = zend_jit_trace_get_exit_point(opline+1, 0); SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } res_info &= ~MAY_BE_GUARD; ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; zend_uchar type = concrete_type(res_info); if (type < IS_STRING) { //| IF_NOT_ZVAL_TYPE const_addr, type, &exit_addr ZEND_ASSERT(Z_MODE(const_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(const_addr)), Z_OFFSET(const_addr)+offsetof(zval, u1.v.type), type, (ptrdiff_t)(exit_addr)); #line 15561 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| GET_ZVAL_TYPE_INFO edx, const_addr ZEND_ASSERT(Z_MODE(const_addr) == IS_MEM_ZVAL); #line 15563 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| IF_NOT_TYPE dl, type, &exit_addr dasm_put(Dst, 7032, (Z_REG(const_addr)), Z_OFFSET(const_addr)+offsetof(zval,u1.type_info), type, (ptrdiff_t)(exit_addr)); #line 15564 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| ZVAL_COPY_VALUE_V res_addr, -1, const_addr, res_info, ZREG_R0, ZREG_R1 if (res_info & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((res_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(const_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(const_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(const_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(const_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(const_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(const_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(const_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(const_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(const_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(const_addr))); } } } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(const_addr)), Z_OFFSET(const_addr)); } else if (Z_MODE(const_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(const_addr)) { dasm_put(Dst, 1682, (Z_REG(const_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(const_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(const_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R1), (ZREG_R1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(const_addr)))) { dasm_put(Dst, 1658, (ZREG_R1), (unsigned int)(Z_LVAL_P(Z_ZV(const_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(const_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R1), Z_LVAL_P(Z_ZV(const_addr))); } } } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(const_addr)), Z_OFFSET(const_addr)); } else if (Z_MODE(const_addr) == IS_REG) { if (ZREG_R1 != Z_REG(const_addr)) { dasm_put(Dst, 1682, (Z_REG(const_addr)), (ZREG_R1)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R1), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((res_info & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(const_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(const_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(const_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(const_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(const_addr) != IS_REG || Z_REG(res_addr) != Z_REG(const_addr)) { if (Z_MODE(const_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(const_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(const_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(const_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(const_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(const_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(const_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(const_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)), Z_OFFSET(const_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)), Z_OFFSET(const_addr)); } } else if (Z_MODE(const_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(const_addr) != IS_REG || ZREG_XMM0 != Z_REG(const_addr)) { if (Z_MODE(const_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(const_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(const_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(const_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(const_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(const_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(const_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(const_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(const_addr)), Z_OFFSET(const_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(const_addr)), Z_OFFSET(const_addr)); } } else if (Z_MODE(const_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(res_info & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(const_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(const_addr)), Z_OFFSET(const_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(const_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(const_addr)), Z_OFFSET(const_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } #line 15566 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (type < IS_STRING) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { //| SET_ZVAL_TYPE_INFO res_addr, type ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); #line 15569 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, res_info)) { return 0; } } else { //| SET_ZVAL_TYPE_INFO res_addr, edx ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 15574 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| TRY_ADDREF res_info, dh, r1 dasm_put(Dst, 6919, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); if (res_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (res_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 3981); } dasm_put(Dst, 2078); } #line 15575 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else { //| // ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value); (no dup) //| ZVAL_COPY_VALUE res_addr, MAY_BE_ANY, const_addr, MAY_BE_ANY, ZREG_R0, ZREG_R1 if (MAY_BE_ANY & (MAY_BE_ANY-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE))) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_LONG) { if (Z_MODE(const_addr) == IS_REG) { if (Z_MODE(res_addr) != IS_REG || Z_REG(res_addr) != Z_REG(const_addr)) { if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (Z_REG(const_addr)), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (Z_REG(const_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(const_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(const_addr)) == 0) { dasm_put(Dst, 1650, (Z_REG(res_addr)), (Z_REG(res_addr))); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(const_addr)))) { dasm_put(Dst, 1658, (Z_REG(res_addr)), (unsigned int)(Z_LVAL_P(Z_ZV(const_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(const_addr)))>>32)); } else { dasm_put(Dst, 1665, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(const_addr))); } } } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (Z_REG(res_addr)), (Z_REG(const_addr)), Z_OFFSET(const_addr)); } else if (Z_MODE(const_addr) == IS_REG) { if (Z_REG(res_addr) != Z_REG(const_addr)) { dasm_put(Dst, 1682, (Z_REG(const_addr)), (Z_REG(res_addr))); } } else { ZEND_UNREACHABLE(); } } else { if (Z_MODE(const_addr) == IS_CONST_ZVAL) { if (Z_LVAL_P(Z_ZV(const_addr)) == 0) { dasm_put(Dst, 1650, (ZREG_R1), (ZREG_R1)); } else { if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(const_addr)))) { dasm_put(Dst, 1658, (ZREG_R1), (unsigned int)(Z_LVAL_P(Z_ZV(const_addr))), (unsigned int)((Z_LVAL_P(Z_ZV(const_addr)))>>32)); } else { dasm_put(Dst, 1665, (ZREG_R1), Z_LVAL_P(Z_ZV(const_addr))); } } } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(const_addr)), Z_OFFSET(const_addr)); } else if (Z_MODE(const_addr) == IS_REG) { if (ZREG_R1 != Z_REG(const_addr)) { dasm_put(Dst, 1682, (Z_REG(const_addr)), (ZREG_R1)); } } else { ZEND_UNREACHABLE(); } if (Z_MODE(res_addr) == IS_REG) { dasm_put(Dst, 1682, (ZREG_R1), (Z_REG(res_addr))); } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_GUARD)) == MAY_BE_DOUBLE) { if (Z_MODE(const_addr) == IS_REG) { if (Z_MODE(res_addr) == IS_REG) { if (Z_REG(const_addr) != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (Z_REG(const_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (Z_REG(const_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } else if (Z_MODE(res_addr) == IS_REG) { if (Z_MODE(const_addr) != IS_REG || Z_REG(res_addr) != Z_REG(const_addr)) { if (Z_MODE(const_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(const_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(const_addr)); } else { dasm_put(Dst, 1867, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(const_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(const_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(const_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(const_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(const_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (Z_REG(res_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (Z_REG(res_addr)-ZREG_XMM0)); } } } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)), Z_OFFSET(const_addr)); } else { dasm_put(Dst, 1907, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)), Z_OFFSET(const_addr)); } } else if (Z_MODE(const_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } } else { if (Z_MODE(const_addr) != IS_REG || ZREG_XMM0 != Z_REG(const_addr)) { if (Z_MODE(const_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(const_addr))) { if (CAN_USE_AVX()) { dasm_put(Dst, 1857, (ZREG_XMM0-ZREG_XMM0), Z_ZV(const_addr)); } else { dasm_put(Dst, 1867, (ZREG_XMM0-ZREG_XMM0), Z_ZV(const_addr)); } } else { if (IS_SIGNED_32BIT(Z_ZV(const_addr))) { dasm_put(Dst, 49, ((ptrdiff_t)Z_ZV(const_addr))); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)Z_ZV(const_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(const_addr)))>>32)); } if (CAN_USE_AVX()) { dasm_put(Dst, 1878, (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1886, (ZREG_XMM0-ZREG_XMM0)); } } } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { if (CAN_USE_AVX()) { dasm_put(Dst, 1895, (ZREG_XMM0-ZREG_XMM0), (Z_REG(const_addr)), Z_OFFSET(const_addr)); } else { dasm_put(Dst, 1907, (ZREG_XMM0-ZREG_XMM0), (Z_REG(const_addr)), Z_OFFSET(const_addr)); } } else if (Z_MODE(const_addr) == IS_REG) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (ZREG_XMM0-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (ZREG_XMM0-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); } } else { ZEND_UNREACHABLE(); } } if (Z_MODE(res_addr) == IS_REG) { if (ZREG_XMM0 != Z_REG(res_addr)) { if (CAN_USE_AVX()) { dasm_put(Dst, 1812, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } else { dasm_put(Dst, 1822, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); } } } else { ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); if (CAN_USE_AVX()) { dasm_put(Dst, 1831, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { dasm_put(Dst, 1844, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } } } else if (!(MAY_BE_ANY & (MAY_BE_DOUBLE|MAY_BE_GUARD))) { ZEND_ASSERT(Z_MODE(const_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(const_addr)), Z_OFFSET(const_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } else { ZEND_ASSERT(Z_MODE(const_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1672, (ZREG_R1), (Z_REG(const_addr)), Z_OFFSET(const_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1802, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); } } if ((MAY_BE_ANY & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)) && !(MAY_BE_ANY & MAY_BE_GUARD) && has_concrete_type(MAY_BE_ANY & MAY_BE_ANY)) { if (Z_MODE(res_addr) == IS_MEM_ZVAL) { if ((MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD)) != (MAY_BE_ANY & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_GUARD))) { zend_uchar type = concrete_type(MAY_BE_ANY); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); } } } else { ZEND_ASSERT(Z_MODE(const_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2084, (ZREG_R0), (Z_REG(const_addr)), Z_OFFSET(const_addr)+offsetof(zval,u1.type_info)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 2094, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); } #line 15579 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| TRY_ADDREF MAY_BE_ANY, ah, r1 if (MAY_BE_ANY & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (MAY_BE_ANY & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 2287); } dasm_put(Dst, 2078); } #line 15580 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //|.cold_code dasm_put(Dst, 289); #line 15583 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //|9: //| // SAVE_OPLINE(); //| SET_EX_OPLINE opline, r0 dasm_put(Dst, 4072); if (opline == last_valid_opline) { zend_jit_use_last_valid_opline(); if (GCC_GLOBAL_REGS) { dasm_put(Dst, 8, Dt1(->opline)); } } else { if (IS_SIGNED_32BIT(opline)) { dasm_put(Dst, 326, Dt1(->opline), ((ptrdiff_t)opline)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); } if (!GCC_GLOBAL_REGS) { zend_jit_reset_last_valid_opline(); } } #line 15586 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num OPLINE_CC EXECUTE_DATA_CC); //| LOAD_ADDR FCARG1a, zv if (IS_SIGNED_32BIT(zv)) { dasm_put(Dst, 759, ((ptrdiff_t)zv)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)zv)), (unsigned int)((((ptrdiff_t)zv))>>32)); } #line 15588 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov FCARG2a, opline->op1.num //| EXT_CALL zend_jit_get_constant, r0 dasm_put(Dst, 712, opline->op1.num); if (MAY_USE_32BIT_ADDR(zend_jit_get_constant)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_get_constant)); } else { if (IS_SIGNED_32BIT(zend_jit_get_constant)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_get_constant)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_get_constant)), (unsigned int)((((ptrdiff_t)zend_jit_get_constant))>>32)); } dasm_put(Dst, 59); } #line 15590 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| // ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); //| test r0, r0 //| jnz <8 //| jmp ->exception_handler //|.code dasm_put(Dst, 8341); #line 15595 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static int zend_jit_in_array(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2)); zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); ZEND_ASSERT(opline->op1_type != IS_VAR && opline->op1_type != IS_TMP_VAR); ZEND_ASSERT((op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)) == MAY_BE_STRING); //| // result = zend_hash_find_ex(ht, Z_STR_P(op1), OP1_TYPE == IS_CONST); //| LOAD_ADDR FCARG1a, ht if (IS_SIGNED_32BIT(ht)) { dasm_put(Dst, 759, ((ptrdiff_t)ht)); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)ht)), (unsigned int)((((ptrdiff_t)ht))>>32)); } #line 15609 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op1_type != IS_CONST) { //| GET_ZVAL_PTR FCARG2a, op1_addr ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); #line 15611 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_hash_find, r0 dasm_put(Dst, 7983, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); if (MAY_USE_32BIT_ADDR(zend_hash_find)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_find)); } else { if (IS_SIGNED_32BIT(zend_hash_find)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_find)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_find)), (unsigned int)((((ptrdiff_t)zend_hash_find))>>32)); } dasm_put(Dst, 59); } #line 15612 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { zend_string *str = Z_STR_P(RT_CONSTANT(opline, opline->op1)); //| LOAD_ADDR FCARG2a, str if (IS_SIGNED_32BIT(str)) { dasm_put(Dst, 712, ((ptrdiff_t)str)); } else { dasm_put(Dst, 717, (unsigned int)(((ptrdiff_t)str)), (unsigned int)((((ptrdiff_t)str))>>32)); } #line 15615 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| EXT_CALL zend_hash_find_known_hash, r0 if (MAY_USE_32BIT_ADDR(zend_hash_find_known_hash)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_hash_find_known_hash)); } else { if (IS_SIGNED_32BIT(zend_hash_find_known_hash)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_hash_find_known_hash)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_hash_find_known_hash)), (unsigned int)((((ptrdiff_t)zend_hash_find_known_hash))>>32)); } dasm_put(Dst, 59); } #line 15616 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| test r0, r0 dasm_put(Dst, 3529); #line 15618 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (exit_addr) { if (smart_branch_opcode == ZEND_JMPZ) { //| jz &exit_addr dasm_put(Dst, 1695, (ptrdiff_t)(exit_addr)); #line 15621 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| jnz &exit_addr dasm_put(Dst, 1525, (ptrdiff_t)(exit_addr)); #line 15623 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } else if (smart_branch_opcode) { if (smart_branch_opcode == ZEND_JMPZ) { //| jz =>target_label dasm_put(Dst, 4533, target_label); #line 15627 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if (smart_branch_opcode == ZEND_JMPNZ) { //| jnz =>target_label dasm_put(Dst, 1787, target_label); #line 15629 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { ZEND_UNREACHABLE(); } } else { //| setnz al //| movzx eax, al //| lea eax, [eax + IS_FALSE] //| SET_ZVAL_TYPE_INFO res_addr, eax dasm_put(Dst, 8354, IS_FALSE); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4525, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); #line 15637 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static int zend_jit_rope(dasm_State **Dst, const zend_op *opline, uint32_t op2_info) { uint32_t offset; offset = (opline->opcode == ZEND_ROPE_INIT) ? opline->result.var : opline->op1.var + opline->extended_value * sizeof(zend_string*); if (opline->op2_type == IS_CONST) { zval *zv = RT_CONSTANT(opline, opline->op2); zend_string *str; ZEND_ASSERT(Z_TYPE_P(zv) == IS_STRING); str = Z_STR_P(zv); //| ADDR_STORE aword [FP + offset], str, r0 if (IS_SIGNED_32BIT(str)) { dasm_put(Dst, 326, offset, ((ptrdiff_t)str)); } else { dasm_put(Dst, 332, (unsigned int)(((ptrdiff_t)str)), (unsigned int)((((ptrdiff_t)str))>>32), offset); } #line 15657 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { zend_jit_addr op2_addr = OP2_ADDR(); ZEND_ASSERT((op2_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_STRING); //| GET_ZVAL_PTR r1, op2_addr ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); #line 15663 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| mov aword [FP + offset], r1 dasm_put(Dst, 8364, (Z_REG(op2_addr)), Z_OFFSET(op2_addr), offset); #line 15664 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" if (opline->op2_type == IS_CV) { //| GET_ZVAL_TYPE_INFO eax, op2_addr ZEND_ASSERT(Z_MODE(op2_addr) == IS_MEM_ZVAL); #line 15666 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| TRY_ADDREF op2_info, ah, r1 dasm_put(Dst, 8376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval,u1.type_info)); if (op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { if (op2_info & (MAY_BE_ANY-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) { dasm_put(Dst, 2287); } dasm_put(Dst, 2078); } #line 15667 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } if (opline->opcode == ZEND_ROPE_END) { zend_jit_addr res_addr = RES_ADDR(); //| lea FCARG1a, [FP + opline->op1.var] //| mov FCARG2d, opline->extended_value //| EXT_CALL zend_jit_rope_end, r0 dasm_put(Dst, 8384, opline->op1.var, opline->extended_value); if (MAY_USE_32BIT_ADDR(zend_jit_rope_end)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_rope_end)); } else { if (IS_SIGNED_32BIT(zend_jit_rope_end)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_rope_end)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_rope_end)), (unsigned int)((((ptrdiff_t)zend_jit_rope_end))>>32)); } dasm_put(Dst, 59); } #line 15676 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_PTR res_addr, r0 ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); #line 15677 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| SET_ZVAL_TYPE_INFO res_addr, IS_STRING_EX dasm_put(Dst, 2191, (Z_REG(res_addr)), Z_OFFSET(res_addr)); ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); dasm_put(Dst, 1578, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_STRING_EX); #line 15678 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } return 1; } static bool zend_jit_noref_guard(dasm_State **Dst, const zend_op *opline, zend_jit_addr var_addr) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_ZVAL_TYPE var_addr, IS_REFERENCE, &exit_addr ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4031, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), IS_REFERENCE, (ptrdiff_t)(exit_addr)); #line 15692 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" return 1; } static bool zend_jit_fetch_reference(dasm_State **Dst, const zend_op *opline, uint8_t var_type, uint32_t *var_info_ptr, zend_jit_addr *var_addr_ptr, bool add_ref_guard, bool add_type_guard) { zend_jit_addr var_addr = *var_addr_ptr; uint32_t var_info = *var_info_ptr; const void *exit_addr = NULL; if (add_ref_guard || add_type_guard) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } } if (add_ref_guard) { //| IF_NOT_ZVAL_TYPE var_addr, IS_REFERENCE, &exit_addr ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), IS_REFERENCE, (ptrdiff_t)(exit_addr)); #line 15713 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } if (opline->opcode == ZEND_INIT_METHOD_CALL && opline->op1_type == IS_VAR) { /* Hack: Convert reference to regular value to simplify JIT code for INIT_METHOD_CALL */ if (Z_REG(var_addr) != ZREG_FCARG1 || Z_OFFSET(var_addr) != 0) { //| LOAD_ZVAL_ADDR FCARG1a, var_addr if (Z_MODE(var_addr) == IS_CONST_ZVAL) { if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { dasm_put(Dst, 759, ((ptrdiff_t)Z_ZV(var_addr))); } else { dasm_put(Dst, 764, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); } } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { if (Z_OFFSET(var_addr)) { dasm_put(Dst, 2220, (Z_REG(var_addr)), Z_OFFSET(var_addr)); } else { dasm_put(Dst, 2228, (Z_REG(var_addr))); } } else { ZEND_UNREACHABLE(); } #line 15718 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } //| EXT_CALL zend_jit_unref_helper, r0 if (MAY_USE_32BIT_ADDR(zend_jit_unref_helper)) { dasm_put(Dst, 46, (ptrdiff_t)(zend_jit_unref_helper)); } else { if (IS_SIGNED_32BIT(zend_jit_unref_helper)) { dasm_put(Dst, 49, ((ptrdiff_t)zend_jit_unref_helper)); } else { dasm_put(Dst, 54, (unsigned int)(((ptrdiff_t)zend_jit_unref_helper)), (unsigned int)((((ptrdiff_t)zend_jit_unref_helper))>>32)); } dasm_put(Dst, 59); } #line 15720 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { //| GET_ZVAL_PTR FCARG1a, var_addr ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(var_addr)), Z_OFFSET(var_addr)); #line 15722 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, offsetof(zend_reference, val)); *var_addr_ptr = var_addr; } if (var_type != IS_UNKNOWN) { var_type &= ~(IS_TRACE_REFERENCE|IS_TRACE_INDIRECT|IS_TRACE_PACKED); } if (add_type_guard && var_type != IS_UNKNOWN && (var_info & (MAY_BE_ANY|MAY_BE_UNDEF)) != (1 << var_type)) { //| IF_NOT_ZVAL_TYPE var_addr, var_type, &exit_addr ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 5704, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), var_type, (ptrdiff_t)(exit_addr)); #line 15733 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" ZEND_ASSERT(var_info & (1 << var_type)); if (var_type < IS_STRING) { var_info = (1 << var_type); } else if (var_type != IS_ARRAY) { var_info = (1 << var_type) | (var_info & (MAY_BE_RC1|MAY_BE_RCN)); } else { var_info = MAY_BE_ARRAY | (var_info & (MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF|MAY_BE_ARRAY_KEY_ANY|MAY_BE_RC1|MAY_BE_RCN)); } *var_info_ptr = var_info; } else { var_info &= ~MAY_BE_REF; *var_info_ptr = var_info; } *var_info_ptr |= MAY_BE_GUARD; /* prevent generation of specialized zval dtor */ return 1; } static bool zend_jit_fetch_indirect_var(dasm_State **Dst, const zend_op *opline, uint8_t var_type, uint32_t *var_info_ptr, zend_jit_addr *var_addr_ptr, bool add_indirect_guard) { zend_jit_addr var_addr = *var_addr_ptr; uint32_t var_info = *var_info_ptr; int32_t exit_point; const void *exit_addr; if (add_indirect_guard) { int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_NOT_ZVAL_TYPE var_addr, IS_INDIRECT, &exit_addr ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); #line 15768 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //| GET_ZVAL_PTR FCARG1a, var_addr dasm_put(Dst, 5704, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), IS_INDIRECT, (ptrdiff_t)(exit_addr)); ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(var_addr)), Z_OFFSET(var_addr)); #line 15769 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else { /* May be already loaded into FCARG1a or RAX by previous FETCH_OBJ_W/DIM_W */ if (opline->op1_type != IS_VAR || (opline-1)->result_type != IS_VAR || (opline-1)->result.var != opline->op1.var || (opline-1)->op1_type == IS_VAR || (opline-1)->op2_type == IS_VAR || (opline-1)->op2_type == IS_TMP_VAR) { //| GET_ZVAL_PTR FCARG1a, var_addr ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); dasm_put(Dst, 4087, (Z_REG(var_addr)), Z_OFFSET(var_addr)); #line 15778 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } else if ((opline-1)->opcode == ZEND_FETCH_DIM_W || (opline-1)->opcode == ZEND_FETCH_DIM_RW) { //| mov FCARG1a, r0 dasm_put(Dst, 2127); #line 15780 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" } } *var_info_ptr &= ~MAY_BE_INDIRECT; var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1, 0); *var_addr_ptr = var_addr; if (var_type != IS_UNKNOWN) { var_type &= ~(IS_TRACE_INDIRECT|IS_TRACE_PACKED); } if (!(var_type & IS_TRACE_REFERENCE) && var_type != IS_UNKNOWN && (var_info & (MAY_BE_ANY|MAY_BE_UNDEF)) != (1 << var_type)) { exit_point = zend_jit_trace_get_exit_point(opline, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; } //| IF_NOT_Z_TYPE FCARG1a, var_type, &exit_addr dasm_put(Dst, 8391, offsetof(zval, u1.v.type), var_type, (ptrdiff_t)(exit_addr)); #line 15800 "/www/server/php/82/src/ext/opcache/jit/zend_jit_x86.dasc" //var_info = zend_jit_trace_type_to_info_ex(var_type, var_info); ZEND_ASSERT(var_info & (1 << var_type)); if (var_type < IS_STRING) { var_info = (1 << var_type); } else if (var_type != IS_ARRAY) { var_info = (1 << var_type) | (var_info & (MAY_BE_RC1|MAY_BE_RCN)); } else { var_info = MAY_BE_ARRAY | (var_info & (MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF|MAY_BE_ARRAY_KEY_ANY|MAY_BE_RC1|MAY_BE_RCN)); } *var_info_ptr = var_info; } return 1; } static bool zend_jit_may_reuse_reg(const zend_op *opline, const zend_ssa_op *ssa_op, zend_ssa *ssa, int def_var, int use_var) { if ((ssa->var_info[def_var].type & ~MAY_BE_GUARD) != (ssa->var_info[use_var].type & ~MAY_BE_GUARD)) { return 0; } switch (opline->opcode) { case ZEND_QM_ASSIGN: case ZEND_SEND_VAR: case ZEND_ASSIGN: case ZEND_PRE_INC: case ZEND_PRE_DEC: case ZEND_POST_INC: case ZEND_POST_DEC: return 1; case ZEND_ADD: case ZEND_SUB: case ZEND_MUL: case ZEND_BW_OR: case ZEND_BW_AND: case ZEND_BW_XOR: if (def_var == ssa_op->result_def && use_var == ssa_op->op1_use) { return 1; } break; default: break; } return 0; } static bool zend_jit_opline_supports_reg(const zend_op_array *op_array, zend_ssa *ssa, const zend_op *opline, const zend_ssa_op *ssa_op, zend_jit_trace_rec *trace) { uint32_t op1_info, op2_info; switch (opline->opcode) { case ZEND_SEND_VAR: case ZEND_SEND_VAL: case ZEND_SEND_VAL_EX: return (opline->op2_type != IS_CONST); case ZEND_QM_ASSIGN: case ZEND_IS_SMALLER: case ZEND_IS_SMALLER_OR_EQUAL: case ZEND_IS_EQUAL: case ZEND_IS_NOT_EQUAL: case ZEND_IS_IDENTICAL: case ZEND_IS_NOT_IDENTICAL: case ZEND_CASE: return 1; case ZEND_RETURN: return (op_array->type != ZEND_EVAL_CODE && op_array->function_name); case ZEND_ASSIGN: op1_info = OP1_INFO(); op2_info = OP2_INFO(); return opline->op1_type == IS_CV && !(op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_RESOURCE|MAY_BE_OBJECT|MAY_BE_REF)) && !(op2_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE))); case ZEND_ADD: case ZEND_SUB: case ZEND_MUL: op1_info = OP1_INFO(); op2_info = OP2_INFO(); return !((op1_info | op2_info) & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF) - (MAY_BE_LONG|MAY_BE_DOUBLE))); case ZEND_BW_OR: case ZEND_BW_AND: case ZEND_BW_XOR: case ZEND_SL: case ZEND_SR: case ZEND_MOD: op1_info = OP1_INFO(); op2_info = OP2_INFO(); return !((op1_info | op2_info) & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF) - MAY_BE_LONG)); case ZEND_PRE_INC: case ZEND_PRE_DEC: case ZEND_POST_INC: case ZEND_POST_DEC: op1_info = OP1_INFO(); op2_info = OP1_DEF_INFO(); return opline->op1_type == IS_CV && !(op1_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF) - MAY_BE_LONG)) && (op2_info & MAY_BE_LONG); case ZEND_STRLEN: op1_info = OP1_INFO(); return (opline->op1_type & (IS_CV|IS_CONST)) && (op1_info & (MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)) == MAY_BE_STRING; case ZEND_COUNT: op1_info = OP1_INFO(); return (opline->op1_type & (IS_CV|IS_CONST)) && (op1_info & (MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)) == MAY_BE_ARRAY; case ZEND_JMPZ: case ZEND_JMPNZ: if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE) { if (!ssa->cfg.map) { return 0; } if (opline > op_array->opcodes + ssa->cfg.blocks[ssa->cfg.map[opline-op_array->opcodes]].start && ((opline-1)->result_type & (IS_SMART_BRANCH_JMPZ|IS_SMART_BRANCH_JMPNZ)) != 0) { return 0; } } ZEND_FALLTHROUGH; case ZEND_BOOL: case ZEND_BOOL_NOT: case ZEND_JMPZ_EX: case ZEND_JMPNZ_EX: return 1; case ZEND_FETCH_CONSTANT: return 1; case ZEND_FETCH_DIM_R: op1_info = OP1_INFO(); op2_info = OP2_INFO(); if (trace && trace->op1_type != IS_UNKNOWN && (trace->op1_type & ~(IS_TRACE_REFERENCE|IS_TRACE_INDIRECT|IS_TRACE_PACKED)) == IS_ARRAY) { op1_info &= ~((MAY_BE_ANY|MAY_BE_UNDEF) - MAY_BE_ARRAY); } return ((op1_info & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_ARRAY) && (!(opline->op1_type & (IS_TMP_VAR|IS_VAR)) || !(op1_info & MAY_BE_RC1)) && (((op2_info & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_LONG) || (((op2_info & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_STRING) && (!(opline->op2_type & (IS_TMP_VAR|IS_VAR)) || !(op2_info & MAY_BE_RC1)))); } return 0; } static bool zend_jit_var_supports_reg(zend_ssa *ssa, int var) { if (ssa->vars[var].no_val) { /* we don't need the value */ return 0; } if (!(JIT_G(opt_flags) & ZEND_JIT_REG_ALLOC_GLOBAL)) { /* Disable global register allocation, * register allocation for SSA variables connected through Phi functions */ if (ssa->vars[var].definition_phi) { return 0; } if (ssa->vars[var].phi_use_chain) { zend_ssa_phi *phi = ssa->vars[var].phi_use_chain; do { if (!ssa->vars[phi->ssa_var].no_val) { return 0; } phi = zend_ssa_next_use_phi(ssa, var, phi); } while (phi); } } if (((ssa->var_info[var].type & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)) != MAY_BE_DOUBLE) && ((ssa->var_info[var].type & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)) != MAY_BE_LONG)) { /* bad type */ return 0; } return 1; } static bool zend_jit_may_be_in_reg(const zend_op_array *op_array, zend_ssa *ssa, int var) { if (!zend_jit_var_supports_reg(ssa, var)) { return 0; } if (ssa->vars[var].definition >= 0) { uint32_t def = ssa->vars[var].definition; if (!zend_jit_opline_supports_reg(op_array, ssa, op_array->opcodes + def, ssa->ops + def, NULL)) { return 0; } } if (ssa->vars[var].use_chain >= 0) { int use = ssa->vars[var].use_chain; do { if (!zend_ssa_is_no_val_use(op_array->opcodes + use, ssa->ops + use, var) && !zend_jit_opline_supports_reg(op_array, ssa, op_array->opcodes + use, ssa->ops + use, NULL)) { return 0; } use = zend_ssa_next_use(ssa->ops, var, use); } while (use >= 0); } return 1; } static bool zend_needs_extra_reg_for_const(const zend_op *opline, zend_uchar op_type, znode_op op) { //|.if X64 if (op_type == IS_CONST) { zval *zv = RT_CONSTANT(opline, op); if (Z_TYPE_P(zv) == IS_DOUBLE && Z_DVAL_P(zv) != 0 && !IS_SIGNED_32BIT(zv)) { return 1; } else if (Z_TYPE_P(zv) == IS_LONG && !IS_SIGNED_32BIT(Z_LVAL_P(zv))) { return 1; } } //|.endif return 0; } static zend_regset zend_jit_get_def_scratch_regset(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa, int current_var, bool last_use) { uint32_t op1_info, op2_info; switch (opline->opcode) { case ZEND_FETCH_DIM_R: op1_info = OP1_INFO(); op2_info = OP2_INFO(); if (((opline->op1_type & (IS_TMP_VAR|IS_VAR)) && (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) || ((opline->op2_type & (IS_TMP_VAR|IS_VAR)) && (op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)))) { return ZEND_REGSET(ZREG_FCARG1); } break; default: break; } return ZEND_REGSET_EMPTY; } static zend_regset zend_jit_get_scratch_regset(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa, int current_var, bool last_use) { uint32_t op1_info, op2_info, res_info; zend_regset regset = ZEND_REGSET_SCRATCH; switch (opline->opcode) { case ZEND_NOP: case ZEND_OP_DATA: case ZEND_JMP: case ZEND_RETURN: regset = ZEND_REGSET_EMPTY; break; case ZEND_QM_ASSIGN: if (ssa_op->op1_def == current_var || ssa_op->result_def == current_var) { regset = ZEND_REGSET_EMPTY; break; } /* break missing intentionally */ case ZEND_SEND_VAL: case ZEND_SEND_VAL_EX: if (opline->op2_type == IS_CONST) { break; } if (ssa_op->op1_use == current_var) { regset = ZEND_REGSET(ZREG_R0); break; } op1_info = OP1_INFO(); if (!(op1_info & MAY_BE_UNDEF)) { if ((op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_DOUBLE) { regset = ZEND_REGSET(ZREG_XMM0); } else if ((op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_LONG) { regset = ZEND_REGSET(ZREG_R0); } else { regset = ZEND_REGSET_UNION(ZEND_REGSET(ZREG_R0), ZEND_REGSET(ZREG_R2)); } } break; case ZEND_SEND_VAR: if (opline->op2_type == IS_CONST) { break; } if (ssa_op->op1_use == current_var || ssa_op->op1_def == current_var) { regset = ZEND_REGSET_EMPTY; break; } op1_info = OP1_INFO(); if (!(op1_info & MAY_BE_UNDEF)) { if ((op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_DOUBLE) { regset = ZEND_REGSET(ZREG_XMM0); } else if ((op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_LONG) { } else { regset = ZEND_REGSET_UNION(ZEND_REGSET(ZREG_R0), ZEND_REGSET(ZREG_R2)); if (op1_info & MAY_BE_REF) { ZEND_REGSET_INCL(regset, ZREG_R1); } } } break; case ZEND_ASSIGN: if (ssa_op->op2_use == current_var || ssa_op->op2_def == current_var || ssa_op->op1_def == current_var || ssa_op->result_def == current_var) { regset = ZEND_REGSET_EMPTY; break; } op1_info = OP1_INFO(); op2_info = OP2_INFO(); if (opline->op1_type == IS_CV && !(op2_info & MAY_BE_UNDEF) && !(op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) { if ((op2_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_DOUBLE) { regset = ZEND_REGSET(ZREG_XMM0); } else if ((op2_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_LONG) { regset = ZEND_REGSET(ZREG_R0); } else { regset = ZEND_REGSET_UNION(ZEND_REGSET(ZREG_R0), ZEND_REGSET(ZREG_R2)); } } break; case ZEND_PRE_INC: case ZEND_PRE_DEC: case ZEND_POST_INC: case ZEND_POST_DEC: if (ssa_op->op1_use == current_var || ssa_op->op1_def == current_var || ssa_op->result_def == current_var) { regset = ZEND_REGSET_EMPTY; break; } op1_info = OP1_INFO(); if (opline->op1_type == IS_CV && (op1_info & MAY_BE_LONG) && !(op1_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE)))) { regset = ZEND_REGSET_EMPTY; if (op1_info & MAY_BE_DOUBLE) { regset = ZEND_REGSET(ZREG_XMM0); } if (opline->result_type != IS_UNUSED && (op1_info & MAY_BE_LONG)) { ZEND_REGSET_INCL(regset, ZREG_R1); } } break; case ZEND_ADD: case ZEND_SUB: case ZEND_MUL: op1_info = OP1_INFO(); op2_info = OP2_INFO(); if (!(op1_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE))) && !(op2_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE)))) { regset = ZEND_REGSET_EMPTY; if ((op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_LONG)) { if (ssa_op->result_def != current_var && (ssa_op->op1_use != current_var || !last_use)) { ZEND_REGSET_INCL(regset, ZREG_R0); } res_info = RES_INFO(); if (res_info & MAY_BE_DOUBLE) { ZEND_REGSET_INCL(regset, ZREG_R0); ZEND_REGSET_INCL(regset, ZREG_XMM0); ZEND_REGSET_INCL(regset, ZREG_XMM1); } else if (res_info & MAY_BE_GUARD) { ZEND_REGSET_INCL(regset, ZREG_R0); } } if ((op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_DOUBLE)) { if (opline->op1_type == IS_CONST) { ZEND_REGSET_INCL(regset, ZREG_R0); } if (ssa_op->result_def != current_var) { ZEND_REGSET_INCL(regset, ZREG_XMM0); } } if ((op1_info & MAY_BE_DOUBLE) && (op2_info & MAY_BE_LONG)) { if (opline->op2_type == IS_CONST) { ZEND_REGSET_INCL(regset, ZREG_R0); } if (zend_is_commutative(opline->opcode)) { if (ssa_op->result_def != current_var) { ZEND_REGSET_INCL(regset, ZREG_XMM0); } } else { ZEND_REGSET_INCL(regset, ZREG_XMM0); if (ssa_op->result_def != current_var && (ssa_op->op1_use != current_var || !last_use)) { ZEND_REGSET_INCL(regset, ZREG_XMM1); } } } if ((op1_info & MAY_BE_DOUBLE) && (op2_info & MAY_BE_DOUBLE)) { if (ssa_op->result_def != current_var && (ssa_op->op1_use != current_var || !last_use) && (!zend_is_commutative(opline->opcode) || ssa_op->op2_use != current_var || !last_use)) { ZEND_REGSET_INCL(regset, ZREG_XMM0); } } if (zend_needs_extra_reg_for_const(opline, opline->op1_type, opline->op1) || zend_needs_extra_reg_for_const(opline, opline->op2_type, opline->op2)) { if (!ZEND_REGSET_IN(regset, ZREG_R0)) { ZEND_REGSET_INCL(regset, ZREG_R0); } else { ZEND_REGSET_INCL(regset, ZREG_R1); } } } break; case ZEND_BW_OR: case ZEND_BW_AND: case ZEND_BW_XOR: op1_info = OP1_INFO(); op2_info = OP2_INFO(); if (!(op1_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-MAY_BE_LONG)) && !(op2_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-MAY_BE_LONG))) { regset = ZEND_REGSET_EMPTY; if (ssa_op->result_def != current_var && (ssa_op->op1_use != current_var || !last_use)) { ZEND_REGSET_INCL(regset, ZREG_R0); } if (zend_needs_extra_reg_for_const(opline, opline->op1_type, opline->op1) || zend_needs_extra_reg_for_const(opline, opline->op2_type, opline->op2)) { if (!ZEND_REGSET_IN(regset, ZREG_R0)) { ZEND_REGSET_INCL(regset, ZREG_R0); } else { ZEND_REGSET_INCL(regset, ZREG_R1); } } } break; case ZEND_SL: case ZEND_SR: op1_info = OP1_INFO(); op2_info = OP2_INFO(); if (!(op1_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-MAY_BE_LONG)) && !(op2_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-MAY_BE_LONG))) { bw_op: regset = ZEND_REGSET_EMPTY; if (ssa_op->result_def != current_var && (ssa_op->op1_use != current_var || !last_use)) { ZEND_REGSET_INCL(regset, ZREG_R0); } if (opline->op2_type != IS_CONST && ssa_op->op2_use != current_var) { ZEND_REGSET_INCL(regset, ZREG_R1); } } break; case ZEND_MOD: op1_info = OP1_INFO(); op2_info = OP2_INFO(); if (!(op1_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-MAY_BE_LONG)) && !(op2_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-MAY_BE_LONG))) { if (opline->op2_type == IS_CONST && opline->op1_type != IS_CONST && Z_TYPE_P(RT_CONSTANT(opline, opline->op2)) == IS_LONG && zend_long_is_power_of_two(Z_LVAL_P(RT_CONSTANT(opline, opline->op2))) && OP1_HAS_RANGE() && OP1_MIN_RANGE() >= 0) { /* MOD is going to be optimized into AND */ goto bw_op; } else { regset = ZEND_REGSET_EMPTY; ZEND_REGSET_INCL(regset, ZREG_R0); ZEND_REGSET_INCL(regset, ZREG_R2); if (opline->op2_type == IS_CONST) { ZEND_REGSET_INCL(regset, ZREG_R1); } } } break; case ZEND_IS_SMALLER: case ZEND_IS_SMALLER_OR_EQUAL: case ZEND_IS_EQUAL: case ZEND_IS_NOT_EQUAL: case ZEND_IS_IDENTICAL: case ZEND_IS_NOT_IDENTICAL: case ZEND_CASE: op1_info = OP1_INFO(); op2_info = OP2_INFO(); if (!(op1_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE))) && !(op2_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-(MAY_BE_LONG|MAY_BE_DOUBLE)))) { regset = ZEND_REGSET_EMPTY; if (!(opline->result_type & (IS_SMART_BRANCH_JMPZ|IS_SMART_BRANCH_JMPNZ))) { ZEND_REGSET_INCL(regset, ZREG_R0); } if ((op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_LONG) && opline->op1_type != IS_CONST && opline->op2_type != IS_CONST) { if (ssa_op->op1_use != current_var && ssa_op->op2_use != current_var) { ZEND_REGSET_INCL(regset, ZREG_R0); } } if ((op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_DOUBLE)) { ZEND_REGSET_INCL(regset, ZREG_XMM0); } if ((op1_info & MAY_BE_DOUBLE) && (op2_info & MAY_BE_LONG)) { ZEND_REGSET_INCL(regset, ZREG_XMM0); } if ((op1_info & MAY_BE_DOUBLE) && (op2_info & MAY_BE_DOUBLE)) { if (ssa_op->op1_use != current_var && ssa_op->op2_use != current_var) { ZEND_REGSET_INCL(regset, ZREG_XMM0); } } if (zend_needs_extra_reg_for_const(opline, opline->op1_type, opline->op1) || zend_needs_extra_reg_for_const(opline, opline->op2_type, opline->op2)) { ZEND_REGSET_INCL(regset, ZREG_R0); } } break; case ZEND_BOOL: case ZEND_BOOL_NOT: case ZEND_JMPZ: case ZEND_JMPNZ: case ZEND_JMPZ_EX: case ZEND_JMPNZ_EX: op1_info = OP1_INFO(); if (!(op1_info & ((MAY_BE_ANY|MAY_BE_REF|MAY_BE_UNDEF)-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)))) { regset = ZEND_REGSET_EMPTY; if (op1_info & MAY_BE_DOUBLE) { ZEND_REGSET_INCL(regset, ZREG_XMM0); } if (opline->opcode == ZEND_BOOL || opline->opcode == ZEND_BOOL_NOT || opline->opcode == ZEND_JMPZ_EX || opline->opcode == ZEND_JMPNZ_EX) { ZEND_REGSET_INCL(regset, ZREG_R0); } } break; case ZEND_DO_UCALL: case ZEND_DO_FCALL: case ZEND_DO_FCALL_BY_NAME: case ZEND_INCLUDE_OR_EVAL: case ZEND_GENERATOR_CREATE: case ZEND_YIELD: case ZEND_YIELD_FROM: regset = ZEND_REGSET_UNION(ZEND_REGSET_GP, ZEND_REGSET_FP); break; default: break; } if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { if (ssa_op == ssa->ops && JIT_G(current_trace)[ZEND_JIT_TRACE_START_REC_SIZE].op == ZEND_JIT_TRACE_INIT_CALL && (JIT_G(current_trace)[ZEND_JIT_TRACE_START_REC_SIZE].info & ZEND_JIT_TRACE_FAKE_INIT_CALL)) { ZEND_REGSET_INCL(regset, ZREG_R0); ZEND_REGSET_INCL(regset, ZREG_R1); } } /* %r0 is used to check EG(vm_interrupt) */ if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { if (ssa_op == ssa->ops && (JIT_G(current_trace)->stop == ZEND_JIT_TRACE_STOP_LOOP || JIT_G(current_trace)->stop == ZEND_JIT_TRACE_STOP_RECURSIVE_CALL)) { #if ZTS ZEND_REGSET_INCL(regset, ZREG_R0); #else if ((sizeof(void*) == 8 && !IS_SIGNED_32BIT(&EG(vm_interrupt)))) { ZEND_REGSET_INCL(regset, ZREG_R0); } #endif } } else { uint32_t b = ssa->cfg.map[ssa_op - ssa->ops]; if ((ssa->cfg.blocks[b].flags & ZEND_BB_LOOP_HEADER) != 0 && ssa->cfg.blocks[b].start == ssa_op - ssa->ops) { #if ZTS ZEND_REGSET_INCL(regset, ZREG_R0); #else if ((sizeof(void*) == 8 && !IS_SIGNED_32BIT(&EG(vm_interrupt)))) { ZEND_REGSET_INCL(regset, ZREG_R0); } #endif } } return regset; } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: */