From 02aa942c3856f774baebfaea8a843f50bf8ce450 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Fri, 21 Jun 2024 14:41:32 +0200 Subject: [PATCH 1/2] Remove unused PHP-8.3 generated JIT files --- ext/opcache/jit/zend_jit_x86.c | 52252 ------------------------------- ext/opcache/minilua | Bin 192768 -> 0 bytes 2 files changed, 52252 deletions(-) delete mode 100644 ext/opcache/jit/zend_jit_x86.c delete mode 100755 ext/opcache/minilua diff --git a/ext/opcache/jit/zend_jit_x86.c b/ext/opcache/jit/zend_jit_x86.c deleted file mode 100644 index b14042dffdb8b..0000000000000 --- a/ext/opcache/jit/zend_jit_x86.c +++ /dev/null @@ -1,52252 +0,0 @@ -/* -** 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 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc". -*/ - -#line 1 "/home/jakub/prog/php/83/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 | - * | license@php.net so we can mail you a copy immediately. | - * +----------------------------------------------------------------------+ - * | Authors: Dmitry Stogov | - * | Xinchen Hui | - * +----------------------------------------------------------------------+ - */ - -//|.if X64 - //|.arch x64 -#if DASM_VERSION != 10500 -#error "Version mismatch between DynASM and included encoding engine" -#endif -#line 22 "/home/jakub/prog/php/83/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 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" -//|.type OP, zend_op -#define Dt2(_V) (int)(ptrdiff_t)&(((zend_op *)0)_V) -#line 138 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" -//|.type ZVAL, zval -#define Dt3(_V) (int)(ptrdiff_t)&(((zval *)0)_V) -#line 139 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" -//|.actionlist dasm_actions -static const unsigned char dasm_actions[8641] = { - 77,139,190,233,255,248,10,255,77,137,190,233,255,100,255,72,139,4,37,237, - 255,72,139,4,37,8,0,0,0,72,139,128,233,72,139,128,233,255,198,128,233,0,100, - 255,128,184,233,0,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,184,233,0, - 15,132,244,247,255,248,1,100,255,76,139,176,233,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,100, - 255,72,139,128,233,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,100,255,76, - 139,184,233,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,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,100,255,76,137,184,233,248,5,255, - 76,139,60,37,237,255,76,139,60,37,8,0,0,0,77,139,191,233,77,139,191,233,255, - 77,141,191,233,255,77,141,191,233,77,137,190,233,255,77,137,190,233,252,233, - 244,11,255,76,137,252,255,255,73,139,190,233,255,72,137,184,233,248,5,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,100,255,76,137,184, - 233,248,1,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,100,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,128,184,233,0,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,73,199,199,237,255,73,191,237,237,255,73,191,237, - 237,77,137,190,233,255,128,184,233,0,255,15,133,243,255,252,233,244,10,254, - 0,128,184,233,0,15,132,245,252,233,243,255,252,233,245,255,72,131,184,233, - 0,15,133,244,11,255,72,131,184,233,0,15,133,244,12,255,80,100,255,199,128, - 233,237,88,255,72,139,4,240,131,37,237,255,72,139,4,240,131,37,8,0,0,0,72, - 139,128,253,240,131,240,3,233,72,139,128,253,240,131,240,3,233,255,64,199, - 128,253,240,11,233,237,255,249,254,0,128,184,233,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,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,139,12,37,237,255,72,139,12,37,8,0,0,0,72,139,137,233,72,139,137,233, - 255,72,131,185,233,0,15,133,244,11,255,76,139,177,233,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, - 72,131,184,233,0,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,72,131,184,233, - 0,15,132,244,254,252,233,244,11,255,64,128,184,253,240,11,233,235,15,132, - 243,255,72,139,52,37,237,255,72,139,52,37,8,0,0,0,72,139,182,233,72,139,182, - 233,255,72,141,182,233,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,100,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,248,8,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, - 141,182,233,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, - 72,139,60,37,237,255,72,139,60,37,8,0,0,0,72,139,191,233,72,139,191,233,255, - 72,141,191,233,248,1,255,64,128,184,253,240,11,233,235,15,133,244,247,72, - 137,60,36,72,199,199,237,255,72,139,60,36,100,255,72,141,182,233,252,233, - 244,248,248,1,255,128,191,233,235,15,132,244,247,254,1,72,141,191,233,252, - 233,244,247,254,0,128,190,233,235,15,132,244,247,254,1,72,137,60,36,191,237, - 255,72,141,182,233,252,233,244,247,254,0,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,131,185,233,0,15,133,244,12,255,72,139, - 136,233,100,255,72,43,136,233,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,72, - 139,20,37,237,255,72,139,20,37,8,0,0,0,72,139,146,233,72,139,146,233,255, - 72,139,146,233,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,130,233,239,255,72,1,186,233,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,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,139,145,233,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,100, - 255,72,3,145,233,72,139,18,248,1,255,76,137,185,233,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,76,137,185,233,255,252,255,144,233,255, - 76,137,176,233,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,72,131,184,233,0,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,248,4,100,255,72,139,191, - 233,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,73,139,134,233,100,255,72,137,130, - 233,255,73,139,190,233,100,255,72,137,184,233,76,137,252,247,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,76,137,176,233,77,139,182,233, - 255,72,131,184,233,0,15,133,244,16,255,15,133,244,41,255,72,131,184,233,0, - 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,100,255,139, - 137,233,72,193,225,5,72,57,200,15,131,244,255,100,255,72,3,129,233,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,139,135,233,169,237,15,132,244, - 252,129,224,239,137,135,233,255,248,6,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,248,4,139,135,233,169,237,15,132,244,252,129,224, - 239,137,135,233,252,233,244,250,248,6,255,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,128,191,233,235,15,132,244,251,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,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,72,133,192,15,132,244,11,100,255,72,141,191, - 233,252,233,244,254,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 "/home/jakub/prog/php/83/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 "/home/jakub/prog/php/83/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 "/home/jakub/prog/php/83/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 -//|| } else { -//| mov64 reg, ((ptrdiff_t)addr) // 0x48 0xb8 -//|| } -//| .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 -//| lea 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< 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<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))) { -//|| uint8_t 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 "/home/jakub/prog/php/83/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 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| //EG(vm_interrupt) = 0; - //| MEM_STORE_ZTS byte, executor_globals, vm_interrupt, 0, r0 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 1717 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| //if (EG(timed_out)) { - //| MEM_CMP_ZTS byte, executor_globals, timed_out, 0, r0 - dasm_put(Dst, 38, (executor_globals_offset+offsetof(zend_executor_globals, vm_interrupt))); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 1719 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| je >1 - //| //zend_timeout(); - //| EXT_CALL zend_timeout, r0 - dasm_put(Dst, 44, (executor_globals_offset+offsetof(zend_executor_globals, timed_out))); - if (MAY_USE_32BIT_ADDR(zend_timeout)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_timeout)); - } else { - if (IS_SIGNED_32BIT(zend_timeout)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_timeout)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_timeout)), (unsigned int)((((ptrdiff_t)zend_timeout))>>32)); - } - dasm_put(Dst, 66); - } -#line 1722 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| //} else if (zend_interrupt_function) { - dasm_put(Dst, 70); -#line 1724 "/home/jakub/prog/php/83/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, 73); - if (MAY_USE_32BIT_ADDR(zend_interrupt_function)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_interrupt_function)); - } else { - if (IS_SIGNED_32BIT(zend_interrupt_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_interrupt_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_interrupt_function)), (unsigned int)((((ptrdiff_t)zend_interrupt_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 1729 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 1734 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| je >1 - //| EXT_CALL zend_jit_exception_in_interrupt_handler_helper, r0 - dasm_put(Dst, 78, (executor_globals_offset+offsetof(zend_executor_globals, exception))); - if (MAY_USE_32BIT_ADDR(zend_jit_exception_in_interrupt_handler_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_exception_in_interrupt_handler_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_exception_in_interrupt_handler_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_exception_in_interrupt_handler_helper)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 1736 "/home/jakub/prog/php/83/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, 88); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 1740 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| LOAD_IP - dasm_put(Dst, 92, (executor_globals_offset+offsetof(zend_executor_globals, current_execute_data))); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 0, Dt1(->opline)); - } -#line 1741 "/home/jakub/prog/php/83/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, 97); - #endif -#line 1745 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 1746 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (GCC_GLOBAL_REGS) { - //| add r4, SPAD // stack alignment - //| JMP_IP - dasm_put(Dst, 115); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 1749 "/home/jakub/prog/php/83/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, 120); -#line 1755 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - return 1; -} - -static int zend_jit_exception_handler_stub(dasm_State **Dst) -{ - //|->exception_handler: - dasm_put(Dst, 143); -#line 1763 "/home/jakub/prog/php/83/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, 97); - #endif -#line 1767 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL handler, r0 - if (MAY_USE_32BIT_ADDR(handler)) { - dasm_put(Dst, 53, (ptrdiff_t)(handler)); - } else { - if (IS_SIGNED_32BIT(handler)) { - dasm_put(Dst, 56, ((ptrdiff_t)handler)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); - } - dasm_put(Dst, 66); - } -#line 1768 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 1769 "/home/jakub/prog/php/83/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, 115); - if (MAY_USE_32BIT_ADDR(handler)) { - dasm_put(Dst, 146, (ptrdiff_t)(handler)); - } else { - if (IS_SIGNED_32BIT(handler)) { - dasm_put(Dst, 56, ((ptrdiff_t)handler)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); - } - dasm_put(Dst, 150); - } -#line 1775 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov FCARG1a, FP - //| EXT_CALL handler, r0 - dasm_put(Dst, 73); - if (MAY_USE_32BIT_ADDR(handler)) { - dasm_put(Dst, 53, (ptrdiff_t)(handler)); - } else { - if (IS_SIGNED_32BIT(handler)) { - dasm_put(Dst, 56, ((ptrdiff_t)handler)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); - } - dasm_put(Dst, 66); - } -#line 1778 "/home/jakub/prog/php/83/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, 154); -#line 1786 "/home/jakub/prog/php/83/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, 185); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 1796 "/home/jakub/prog/php/83/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, 189, (executor_globals_offset+offsetof(zend_executor_globals, opline_before_exception)), Dt2(->result_type), (IS_TMP_VAR|IS_VAR), Dt2(->result.var), offsetof(zval,u1.type_info), IS_UNDEF); -#line 1802 "/home/jakub/prog/php/83/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, 219, 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - 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))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } -#line 1816 "/home/jakub/prog/php/83/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, 378, 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - 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))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } -#line 1822 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|9: - //| jmp ->exception_handler - dasm_put(Dst, 399); -#line 1824 "/home/jakub/prog/php/83/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, 406); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 1831 "/home/jakub/prog/php/83/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, 410, (executor_globals_offset+offsetof(zend_executor_globals, opline_before_exception)), 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - 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))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } -#line 1837 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|9: - //| jmp ->exception_handler - dasm_put(Dst, 399); -#line 1839 "/home/jakub/prog/php/83/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, 456, offsetof(zend_execute_data, This.u1.type_info)); -#line 1846 "/home/jakub/prog/php/83/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, 463, ZEND_CALL_TOP); - if (MAY_USE_32BIT_ADDR(zend_jit_leave_nested_func_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_leave_nested_func_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_leave_nested_func_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_leave_nested_func_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_leave_nested_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_leave_nested_func_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 1850 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| ADD_HYBRID_SPAD - #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE - dasm_put(Dst, 97); - #endif -#line 1851 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 1852 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| EXT_CALL zend_jit_leave_top_func_helper, r0 - dasm_put(Dst, 70); - if (MAY_USE_32BIT_ADDR(zend_jit_leave_top_func_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_leave_top_func_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_leave_top_func_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_leave_top_func_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_leave_top_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_leave_top_func_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 1854 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| ADD_HYBRID_SPAD - #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE - dasm_put(Dst, 97); - #endif -#line 1855 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 1856 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - if (GCC_GLOBAL_REGS) { - //| add r4, SPAD - dasm_put(Dst, 115); -#line 1859 "/home/jakub/prog/php/83/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, 472); -#line 1864 "/home/jakub/prog/php/83/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, 463, ZEND_CALL_TOP); - if (MAY_USE_32BIT_ADDR(zend_jit_leave_nested_func_helper)) { - dasm_put(Dst, 146, (ptrdiff_t)(zend_jit_leave_nested_func_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_leave_nested_func_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_leave_nested_func_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_leave_nested_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_leave_nested_func_helper))>>32)); - } - dasm_put(Dst, 150); - } -#line 1868 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| EXT_JMP zend_jit_leave_top_func_helper, r0 - dasm_put(Dst, 70); - if (MAY_USE_32BIT_ADDR(zend_jit_leave_top_func_helper)) { - dasm_put(Dst, 146, (ptrdiff_t)(zend_jit_leave_top_func_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_leave_top_func_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_leave_top_func_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_leave_top_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_leave_top_func_helper))>>32)); - } - dasm_put(Dst, 150); - } -#line 1870 "/home/jakub/prog/php/83/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, 491); -#line 1879 "/home/jakub/prog/php/83/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, 494, Dt2(->opcode), ZEND_HANDLE_EXCEPTION); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 1884 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|5: - //| // opline = EG(exception_op); - //| LOAD_IP_ADDR_ZTS executor_globals, exception_op - dasm_put(Dst, 505, (executor_globals_offset+offsetof(zend_executor_globals, opline_before_exception))); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 512, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 518, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 535, (executor_globals_offset + offsetof(zend_executor_globals, exception_op))); - } else { - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 512, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 518, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 540, (executor_globals_offset + offsetof(zend_executor_globals, exception_op)), Dt1(->opline)); - } -#line 1887 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov aword EX->opline, IP - //| // HANDLE_EXCEPTION() - //| jmp ->exception_handler - dasm_put(Dst, 549, Dt1(->opline)); -#line 1890 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| GET_IP FCARG1a - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 558); - } else { - dasm_put(Dst, 563, Dt1(->opline)); - } -#line 1892 "/home/jakub/prog/php/83/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, 495, Dt2(->opcode), ZEND_HANDLE_EXCEPTION); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 1896 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|5: - //| // opline = EG(exception_op); - //| LOAD_IP_ADDR_ZTS executor_globals, exception_op - dasm_put(Dst, 568, (executor_globals_offset+offsetof(zend_executor_globals, opline_before_exception))); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 512, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 518, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 535, (executor_globals_offset + offsetof(zend_executor_globals, exception_op))); - } else { - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 512, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 518, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 540, (executor_globals_offset + offsetof(zend_executor_globals, exception_op)), Dt1(->opline)); - } -#line 1899 "/home/jakub/prog/php/83/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, 575); -#line 1904 "/home/jakub/prog/php/83/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, 598, Dt1(->opline), Dt2(->opcode), ZEND_HANDLE_EXCEPTION); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 1919 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| // opline = EG(exception_op); - //| LOAD_IP_ADDR_ZTS executor_globals, exception_op - dasm_put(Dst, 615, (executor_globals_offset+offsetof(zend_executor_globals, opline_before_exception))); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 512, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 518, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 535, (executor_globals_offset + offsetof(zend_executor_globals, exception_op))); - } else { - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 512, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 518, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 540, (executor_globals_offset + offsetof(zend_executor_globals, exception_op)), Dt1(->opline)); - } -#line 1922 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (GCC_GLOBAL_REGS) { - //| mov aword EX->opline, IP - dasm_put(Dst, 8, Dt1(->opline)); - } -#line 1925 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| // HANDLE_EXCEPTION() - //| jmp ->exception_handler - dasm_put(Dst, 214); -#line 1927 "/home/jakub/prog/php/83/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, 622, 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, 53, (ptrdiff_t)(zend_cannot_pass_by_reference)); - } else { - if (IS_SIGNED_32BIT(zend_cannot_pass_by_reference)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_cannot_pass_by_reference)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_cannot_pass_by_reference)), (unsigned int)((((ptrdiff_t)zend_cannot_pass_by_reference))>>32)); - } - dasm_put(Dst, 66); - } -#line 1947 "/home/jakub/prog/php/83/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, 667, 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - 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))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } -#line 1952 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|9: - //| jmp ->exception_handler - dasm_put(Dst, 399); -#line 1954 "/home/jakub/prog/php/83/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, 685); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 8, Dt1(->opline)); - } -#line 1962 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->undefined_offset - dasm_put(Dst, 688); -#line 1963 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - - return 1; -} - -static int zend_jit_undefined_offset_stub(dasm_State **Dst) -{ - //|->undefined_offset: - dasm_put(Dst, 693); - if (!GCC_GLOBAL_REGS) { -#line 1971 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1a, FP - dasm_put(Dst, 73); - } -#line 1973 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(zend_jit_undefined_long_key)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_long_key)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_long_key)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_long_key)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_long_key))>>32)); - } - dasm_put(Dst, 150); - } -#line 1974 "/home/jakub/prog/php/83/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, 696); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 8, Dt1(->opline)); - } -#line 1982 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->undefined_index - dasm_put(Dst, 699); -#line 1983 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - - return 1; -} - -static int zend_jit_undefined_index_stub(dasm_State **Dst) -{ - //|->undefined_index: - dasm_put(Dst, 704); - if (!GCC_GLOBAL_REGS) { -#line 1991 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1a, FP - dasm_put(Dst, 73); - } -#line 1993 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(zend_jit_undefined_string_key)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_string_key)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_string_key)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_string_key)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_string_key))>>32)); - } - dasm_put(Dst, 150); - } -#line 1994 "/home/jakub/prog/php/83/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, 707); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 8, Dt1(->opline)); - } -#line 2002 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->cannot_add_element - dasm_put(Dst, 710); -#line 2003 "/home/jakub/prog/php/83/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, 715, 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, 751, ((ptrdiff_t)"Cannot add element to the array as the next element is already occupied")); - } else { - dasm_put(Dst, 756, (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 2031 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL zend_throw_error, r0 - if (MAY_USE_32BIT_ADDR(zend_throw_error)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_throw_error)); - } else { - if (IS_SIGNED_32BIT(zend_throw_error)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_throw_error)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_throw_error)), (unsigned int)((((ptrdiff_t)zend_throw_error))>>32)); - } - dasm_put(Dst, 66); - } -#line 2032 "/home/jakub/prog/php/83/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, 761); -#line 2041 "/home/jakub/prog/php/83/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, 767, Dt1(->opline)); - if (IS_SIGNED_32BIT("Call to undefined function %s()")) { - dasm_put(Dst, 751, ((ptrdiff_t)"Call to undefined function %s()")); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)"Call to undefined function %s()")), (unsigned int)((((ptrdiff_t)"Call to undefined function %s()"))>>32)); - } -#line 2052 "/home/jakub/prog/php/83/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, 778, offsetof(zend_op, op2.constant), offsetof(zend_string, val)); - if (MAY_USE_32BIT_ADDR(zend_throw_error)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_throw_error)); - } else { - if (IS_SIGNED_32BIT(zend_throw_error)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_throw_error)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_throw_error)), (unsigned int)((((ptrdiff_t)zend_throw_error))>>32)); - } - dasm_put(Dst, 66); - } -#line 2056 "/home/jakub/prog/php/83/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, 214); -#line 2066 "/home/jakub/prog/php/83/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, 791, Dt1(->opline)); - if (IS_SIGNED_32BIT(zend_ce_arithmetic_error)) { - dasm_put(Dst, 798, ((ptrdiff_t)zend_ce_arithmetic_error)); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)zend_ce_arithmetic_error)), (unsigned int)((((ptrdiff_t)zend_ce_arithmetic_error))>>32)); - } -#line 2079 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)"Bit shift by negative number")); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)"Bit shift by negative number")), (unsigned int)((((ptrdiff_t)"Bit shift by negative number"))>>32)); - } -#line 2081 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL zend_throw_error, r0 - if (MAY_USE_32BIT_ADDR(zend_throw_error)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_throw_error)); - } else { - if (IS_SIGNED_32BIT(zend_throw_error)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_throw_error)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_throw_error)), (unsigned int)((((ptrdiff_t)zend_throw_error))>>32)); - } - dasm_put(Dst, 66); - } -#line 2082 "/home/jakub/prog/php/83/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, 808); -#line 2095 "/home/jakub/prog/php/83/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, 813, Dt1(->opline)); - if (IS_SIGNED_32BIT(zend_ce_division_by_zero_error)) { - dasm_put(Dst, 798, ((ptrdiff_t)zend_ce_division_by_zero_error)); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)zend_ce_division_by_zero_error)), (unsigned int)((((ptrdiff_t)zend_ce_division_by_zero_error))>>32)); - } -#line 2108 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.endif - //| LOAD_ADDR CARG2, "Modulo by zero" - if (IS_SIGNED_32BIT("Modulo by zero")) { - dasm_put(Dst, 751, ((ptrdiff_t)"Modulo by zero")); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)"Modulo by zero")), (unsigned int)((((ptrdiff_t)"Modulo by zero"))>>32)); - } -#line 2110 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL zend_throw_error, r0 - if (MAY_USE_32BIT_ADDR(zend_throw_error)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_throw_error)); - } else { - if (IS_SIGNED_32BIT(zend_throw_error)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_throw_error)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_throw_error)), (unsigned int)((((ptrdiff_t)zend_throw_error))>>32)); - } - dasm_put(Dst, 66); - } -#line 2111 "/home/jakub/prog/php/83/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, 808); -#line 2124 "/home/jakub/prog/php/83/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, 820, 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, 751, ((ptrdiff_t)"Using $this when not in object context")); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)"Using $this when not in object context")), (unsigned int)((((ptrdiff_t)"Using $this when not in object context"))>>32)); - } -#line 2134 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL zend_throw_error, r0 - if (MAY_USE_32BIT_ADDR(zend_throw_error)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_throw_error)); - } else { - if (IS_SIGNED_32BIT(zend_throw_error)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_throw_error)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_throw_error)), (unsigned int)((((ptrdiff_t)zend_throw_error))>>32)); - } - dasm_put(Dst, 66); - } -#line 2135 "/home/jakub/prog/php/83/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, 214); -#line 2143 "/home/jakub/prog/php/83/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, 841); -#line 2150 "/home/jakub/prog/php/83/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, 853); - if (MAY_USE_32BIT_ADDR(zend_runtime_jit)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_runtime_jit)); - } else { - if (IS_SIGNED_32BIT(zend_runtime_jit)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_runtime_jit)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_runtime_jit)), (unsigned int)((((ptrdiff_t)zend_runtime_jit))>>32)); - } - dasm_put(Dst, 66); - } -#line 2161 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 2162 "/home/jakub/prog/php/83/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, 856); - if (IS_SIGNED_32BIT(&zend_jit_profile_counter)) { - dasm_put(Dst, 56, ((ptrdiff_t)&zend_jit_profile_counter)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)&zend_jit_profile_counter)), (unsigned int)((((ptrdiff_t)&zend_jit_profile_counter))>>32)); - } -#line 2175 "/home/jakub/prog/php/83/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, 859, 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 2189 "/home/jakub/prog/php/83/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, 885, ZEND_JIT_COUNTER_INIT); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 896); - } else { - dasm_put(Dst, 901, Dt1(->opline)); - } -#line 2202 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_hot_func)); - } else { - if (IS_SIGNED_32BIT(zend_jit_hot_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_hot_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_hot_func)), (unsigned int)((((ptrdiff_t)zend_jit_hot_func))>>32)); - } - dasm_put(Dst, 66); - } -#line 2203 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 2204 "/home/jakub/prog/php/83/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, 906); - #endif -#line 2234 "/home/jakub/prog/php/83/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, 913, 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, 934); - } else { - dasm_put(Dst, 939, Dt1(->opline)); - } -#line 2240 "/home/jakub/prog/php/83/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, 944, offsetof(zend_op_array, opcodes)); - ZEND_ASSERT(sizeof(zend_op) == 32); -#line 2244 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| sar r2, 2 - //| .else -#line 2247 "/home/jakub/prog/php/83/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, 949, offsetof(zend_jit_op_array_hot_extension, orig_handlers)); -#line 2254 "/home/jakub/prog/php/83/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, 961); -#line 2264 "/home/jakub/prog/php/83/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, 964); -#line 2276 "/home/jakub/prog/php/83/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, 967, ZEND_JIT_COUNTER_INIT); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 896); - } else { - dasm_put(Dst, 901, Dt1(->opline)); - } -#line 2291 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_trace_hot_root)); - } else { - if (IS_SIGNED_32BIT(zend_jit_trace_hot_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_trace_hot_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_trace_hot_root)), (unsigned int)((((ptrdiff_t)zend_jit_trace_hot_root))>>32)); - } - dasm_put(Dst, 66); - } -#line 2292 "/home/jakub/prog/php/83/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, 978); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 2295 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| LOAD_IP - dasm_put(Dst, 92, (executor_globals_offset+offsetof(zend_executor_globals, current_execute_data))); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 0, Dt1(->opline)); - } -#line 2296 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 2297 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| EXT_JMP zend_jit_halt_op->handler, r0 - dasm_put(Dst, 70); - if (MAY_USE_32BIT_ADDR(zend_jit_halt_op->handler)) { - dasm_put(Dst, 146, (ptrdiff_t)(zend_jit_halt_op->handler)); - } else { - if (IS_SIGNED_32BIT(zend_jit_halt_op->handler)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_halt_op->handler)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_halt_op->handler)), (unsigned int)((((ptrdiff_t)zend_jit_halt_op->handler))>>32)); - } - dasm_put(Dst, 150); - } -#line 2299 "/home/jakub/prog/php/83/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, 906); - #endif -#line 2305 "/home/jakub/prog/php/83/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, 986, 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 2312 "/home/jakub/prog/php/83/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, 1018); -#line 2322 "/home/jakub/prog/php/83/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, 1021); -#line 2334 "/home/jakub/prog/php/83/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, 1024); -#line 2346 "/home/jakub/prog/php/83/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, 1027); -#line 2354 "/home/jakub/prog/php/83/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, 97); - #endif -#line 2356 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(zend_jit_halt_op->handler)); - } else { - if (IS_SIGNED_32BIT(zend_jit_halt_op->handler)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_halt_op->handler)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_halt_op->handler)), (unsigned int)((((ptrdiff_t)zend_jit_halt_op->handler))>>32)); - } - dasm_put(Dst, 150); - } -#line 2357 "/home/jakub/prog/php/83/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, 1030); -#line 2361 "/home/jakub/prog/php/83/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, 1040); -#line 2367 "/home/jakub/prog/php/83/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, 1067, 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 2397 "/home/jakub/prog/php/83/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, 1198, 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 2429 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_trace_exit)); - } else { - if (IS_SIGNED_32BIT(zend_jit_trace_exit)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_trace_exit)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_trace_exit)), (unsigned int)((((ptrdiff_t)zend_jit_trace_exit))>>32)); - } - dasm_put(Dst, 66); - } -#line 2431 "/home/jakub/prog/php/83/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, 1281, 16*8+16*8 /* CPU regs + SSE regs */); -#line 2438 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - - //| test eax, eax - //| jne >1 - dasm_put(Dst, 1286); -#line 2441 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - - //| // execute_data = EG(current_execute_data) - //| MEM_LOAD_ZTS FP, aword, executor_globals, current_execute_data, r0 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 2444 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| // opline = EX(opline) - //| LOAD_IP - dasm_put(Dst, 92, (executor_globals_offset+offsetof(zend_executor_globals, current_execute_data))); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 0, Dt1(->opline)); - } -#line 2446 "/home/jakub/prog/php/83/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, 97); - #endif -#line 2449 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 2450 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (GCC_GLOBAL_REGS) { - //| add r4, SPAD // stack alignment - //| JMP_IP - dasm_put(Dst, 115); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 2453 "/home/jakub/prog/php/83/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, 120); -#line 2459 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|1: - //| jl ->trace_halt - dasm_put(Dst, 1293); -#line 2463 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - - //| // execute_data = EG(current_execute_data) - //| MEM_LOAD_ZTS FP, aword, executor_globals, current_execute_data, r0 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 2466 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| // opline = EX(opline) - //| LOAD_IP - dasm_put(Dst, 92, (executor_globals_offset+offsetof(zend_executor_globals, current_execute_data))); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 0, Dt1(->opline)); - } -#line 2468 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - - //| // check for interrupt (try to avoid this ???) - //| MEM_CMP_ZTS byte, executor_globals, vm_interrupt, 0, r0 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 2471 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne ->interrupt_handler - dasm_put(Dst, 1300, (executor_globals_offset+offsetof(zend_executor_globals, vm_interrupt))); -#line 2472 "/home/jakub/prog/php/83/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, 97); - #endif -#line 2475 "/home/jakub/prog/php/83/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, 1309, Dt1(->func), offsetof(zend_op_array, reserved[zend_func_info_rid]), offsetof(zend_jit_op_array_trace_extension, offset)); -#line 2479 "/home/jakub/prog/php/83/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, 1327, Dt1(->func), offsetof(zend_op_array, reserved[zend_func_info_rid]), offsetof(zend_jit_op_array_trace_extension, offset)); -#line 2485 "/home/jakub/prog/php/83/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, 1349, Dt1(->opline), Dt1(->func), offsetof(zend_op_array, reserved[zend_func_info_rid]), offsetof(zend_jit_op_array_trace_extension, offset)); -#line 2499 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - return 1; -} - -static int zend_jit_trace_escape_stub(dasm_State **Dst) -{ - //|->trace_escape: - //| - dasm_put(Dst, 1403); -#line 2508 "/home/jakub/prog/php/83/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, 97); - #endif -#line 2510 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 2511 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (GCC_GLOBAL_REGS) { - //| add r4, SPAD // stack alignment - //| JMP_IP - dasm_put(Dst, 115); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 2514 "/home/jakub/prog/php/83/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, 120); -#line 2520 "/home/jakub/prog/php/83/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, 1406, i, (4*(ZEND_JIT_EXIT_POINTS_PER_GROUP-i)-6)); -#line 2536 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| push byte i - //|// 1: - //| add aword [r4], n - //| jmp ->trace_exit - dasm_put(Dst, 1412, i, n); -#line 2541 "/home/jakub/prog/php/83/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, 1425); -#line 2550 "/home/jakub/prog/php/83/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, 97); - #endif -#line 2552 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp aword [IP] - dasm_put(Dst, 102); -#line 2553 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (GCC_GLOBAL_REGS) { - //| add r4, SPAD // stack alignment - //| jmp aword [IP] - dasm_put(Dst, 1429); -#line 2556 "/home/jakub/prog/php/83/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, 1438); -#line 2566 "/home/jakub/prog/php/83/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, 1463); -#line 2585 "/home/jakub/prog/php/83/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, 761); -#line 2600 "/home/jakub/prog/php/83/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, 1471); -#line 2617 "/home/jakub/prog/php/83/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, 761); -#line 2632 "/home/jakub/prog/php/83/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, 1479); -#line 2649 "/home/jakub/prog/php/83/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, 761); -#line 2664 "/home/jakub/prog/php/83/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, 1487); -#line 2681 "/home/jakub/prog/php/83/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, 761); -#line 2696 "/home/jakub/prog/php/83/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, 1495); -#line 2713 "/home/jakub/prog/php/83/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, 761); -#line 2728 "/home/jakub/prog/php/83/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; -#elif defined(__MUSL__) - size_t *ti; - - __asm__( - "leaq _tsrm_ls_cache@tlsgd(%%rip), %0\n" - : "=a" (ti)); - tsrm_tls_offset = ti[1]; - tsrm_tls_index = ti[0] * 8; -#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 2958 "/home/jakub/prog/php/83/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 2962 "/home/jakub/prog/php/83/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, 1503); -#line 2983 "/home/jakub/prog/php/83/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, 1505); -#line 2995 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - return 1; -} - -static int zend_jit_align_stub(dasm_State **Dst) -{ - //|.align 16 - dasm_put(Dst, 1505); -#line 3001 "/home/jakub/prog/php/83/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, 906); - #endif -#line 3007 "/home/jakub/prog/php/83/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, 1508); - #endif -#line 3009 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (GCC_GLOBAL_REGS) { - //| sub r4, SPAD // stack alignment - dasm_put(Dst, 1514); -#line 3011 "/home/jakub/prog/php/83/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, 1520); -#line 3016 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - return 1; -} - -static int zend_jit_label(dasm_State **Dst, unsigned int label) -{ - //|=>label: - dasm_put(Dst, 306, label); -#line 3023 "/home/jakub/prog/php/83/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, 1540, Dt1(->prev_execute_data)); -#line 3031 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov r0, EX->call - //| mov EX:RX->prev_execute_data, r0 - dasm_put(Dst, 1549, Dt1(->call), Dt1(->prev_execute_data)); -#line 3034 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| // EX(call) = call; - //| mov EX->call, RX - dasm_put(Dst, 8, Dt1(->call)); -#line 3037 "/home/jakub/prog/php/83/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, 1558, (opline - last_valid_opline) * sizeof(zend_op)); - } else { - dasm_put(Dst, 1563, Dt1(->opline), (opline - last_valid_opline) * sizeof(zend_op)); - } -#line 3050 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| LOAD_IP_ADDR opline - if (GCC_GLOBAL_REGS) { - if (IS_SIGNED_32BIT(opline)) { - dasm_put(Dst, 1569, ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 1574, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32)); - } - } else { - if (IS_SIGNED_32BIT(opline)) { - dasm_put(Dst, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 1579, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - } -#line 3052 "/home/jakub/prog/php/83/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, 1558, (opline - last_valid_opline) * sizeof(zend_op)); - } else { - dasm_put(Dst, 1563, Dt1(->opline), (opline - last_valid_opline) * sizeof(zend_op)); - } -#line 3065 "/home/jakub/prog/php/83/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, 1569, ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 1574, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32)); - } -#line 3067 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov aword EX->opline, RX - dasm_put(Dst, 8, Dt1(->opline)); -#line 3068 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| LOAD_IP_ADDR opline - if (GCC_GLOBAL_REGS) { - if (IS_SIGNED_32BIT(opline)) { - dasm_put(Dst, 1569, ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 1574, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32)); - } - } else { - if (IS_SIGNED_32BIT(opline)) { - dasm_put(Dst, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 1579, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - } -#line 3070 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 3097 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne ->interrupt_handler - dasm_put(Dst, 1300, (executor_globals_offset+offsetof(zend_executor_globals, vm_interrupt))); -#line 3098 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" -#else - //| MEM_CMP_ZTS byte, executor_globals, vm_interrupt, 0, r0 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 1588, (executor_globals_offset+offsetof(zend_executor_globals, vm_interrupt))); -#line 3100 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (exit_addr) { - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 3102 "/home/jakub/prog/php/83/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, 1304); -#line 3105 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jne >1 - //|.cold_code - dasm_put(Dst, 272); -#line 3108 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| LOAD_IP_ADDR opline - dasm_put(Dst, 70); - if (GCC_GLOBAL_REGS) { - if (IS_SIGNED_32BIT(opline)) { - dasm_put(Dst, 1569, ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 1574, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32)); - } - } else { - if (IS_SIGNED_32BIT(opline)) { - dasm_put(Dst, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 1579, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - } -#line 3110 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->interrupt_handler - //|.code - dasm_put(Dst, 1597); -#line 3112 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 3121 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| je =>loop_label - //| jmp &timeout_exit_addr - dasm_put(Dst, 1603, (executor_globals_offset+offsetof(zend_executor_globals, vm_interrupt)), loop_label, (ptrdiff_t)(timeout_exit_addr)); -#line 3123 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp =>loop_label - dasm_put(Dst, 1614, loop_label); -#line 3125 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 3132 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne ->exception_handler - dasm_put(Dst, 1618, (executor_globals_offset+offsetof(zend_executor_globals, exception))); -#line 3133 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 3140 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne ->exception_handler_undef - dasm_put(Dst, 1628, (executor_globals_offset+offsetof(zend_executor_globals, exception))); -#line 3141 "/home/jakub/prog/php/83/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, 1638); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 3185 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| pop r0 - dasm_put(Dst, 1641, (executor_globals_offset+offsetof(zend_executor_globals, jit_trace_num)), trace_num); -#line 3186 "/home/jakub/prog/php/83/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) - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 1647, (tmp), tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 1655, (tmp), (tmp), (tmp), tsrm_tls_index, (tmp), (tmp), tsrm_tls_offset); - } - dasm_put(Dst, 1684, (tmp), (executor_globals_offset+offsetof(zend_executor_globals, jit_trace_num)), trace_num); -#line 3190 "/home/jakub/prog/php/83/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, 276); -#line 3199 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|=>1: // end of the code - //|.code - dasm_put(Dst, 1693, 1); -#line 3201 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 3419 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| je &link_addr - //| jmp &timeout_exit_addr - dasm_put(Dst, 1696, (executor_globals_offset+offsetof(zend_executor_globals, vm_interrupt)), (ptrdiff_t)(link_addr), (ptrdiff_t)(timeout_exit_addr)); -#line 3421 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp &link_addr - dasm_put(Dst, 146, (ptrdiff_t)(link_addr)); -#line 3423 "/home/jakub/prog/php/83/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, 1707); -#line 3431 "/home/jakub/prog/php/83/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, 97); - #endif -#line 3434 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (!original_handler) { - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 3436 "/home/jakub/prog/php/83/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, 1309, Dt1(->func), offsetof(zend_op_array, reserved[zend_func_info_rid]), offsetof(zend_jit_op_array_trace_extension, offset)); -#line 3441 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (GCC_GLOBAL_REGS) { - //| add r4, SPAD // stack alignment - dasm_put(Dst, 115); -#line 3444 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (!original_handler) { - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 3446 "/home/jakub/prog/php/83/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, 1309, Dt1(->func), offsetof(zend_op_array, reserved[zend_func_info_rid]), offsetof(zend_jit_op_array_trace_extension, offset)); -#line 3451 "/home/jakub/prog/php/83/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, 1712, Dt1(->func), offsetof(zend_op_array, reserved[zend_func_info_rid]), offsetof(zend_jit_op_array_trace_extension, offset)); -#line 3459 "/home/jakub/prog/php/83/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, 476); -#line 3463 "/home/jakub/prog/php/83/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, 1734); -#line 3471 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| ret - dasm_put(Dst, 141); -#line 3473 "/home/jakub/prog/php/83/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, 1742, var+offsetof(zval, u1.v.type), type, (ptrdiff_t)(exit_addr)); -#line 3487 "/home/jakub/prog/php/83/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, 1751, var+offsetof(zval, u1.v.type), IS_STRING, (ptrdiff_t)(exit_addr)); -#line 3501 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var))))) { - dasm_put(Dst, 1768, (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, 1775, (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, 1674, (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, 1782, (Z_REG(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var))), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 3515 "/home/jakub/prog/php/83/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, 1790, offsetof(zend_array, u.flags), HASH_FLAG_PACKED, (ptrdiff_t)(exit_addr)); -#line 3518 "/home/jakub/prog/php/83/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, 1799, offsetof(zend_array, u.flags), HASH_FLAG_PACKED, (ptrdiff_t)(exit_addr)); -#line 3521 "/home/jakub/prog/php/83/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, 73); -#line 3539 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| EXT_CALL handler, r0 - if (MAY_USE_32BIT_ADDR(handler)) { - dasm_put(Dst, 53, (ptrdiff_t)(handler)); - } else { - if (IS_SIGNED_32BIT(handler)) { - dasm_put(Dst, 56, ((ptrdiff_t)handler)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); - } - dasm_put(Dst, 66); - } -#line 3541 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 1808, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 1814, tsrm_tls_index, tsrm_tls_offset); - } -#line 3545 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne ->exception_handler - dasm_put(Dst, 1831, (executor_globals_offset+offsetof(zend_executor_globals, exception))); -#line 3546 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 1808, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 1814, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 1841, (executor_globals_offset+offsetof(zend_executor_globals, current_execute_data))); -#line 3561 "/home/jakub/prog/php/83/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, 1846, zend_jit_halt_op); -#line 3576 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (GCC_GLOBAL_REGS) { - //| test IP, IP - //| je ->trace_halt - dasm_put(Dst, 1856); -#line 3580 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| test eax, eax - //| jl ->trace_halt - dasm_put(Dst, 1865); -#line 3583 "/home/jakub/prog/php/83/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, 1872); -#line 3589 "/home/jakub/prog/php/83/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; - case ZEND_BIND_INIT_STATIC_OR_JMP: - if (opline->op1_type == IS_CV) { - old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var)); - SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.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; - case ZEND_BIND_INIT_STATIC_OR_JMP: - if (opline->op1_type == IS_CV) { - SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var), old_info); - } - break; - } - - if (!exit_addr) { - return 0; - } - //| CMP_IP next_opline - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 1877, next_opline); - } else { - dasm_put(Dst, 1883, Dt1(->opline), next_opline); - } -#line 3674 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 3675 "/home/jakub/prog/php/83/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, 73); -#line 3698 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| EXT_CALL handler, r0 - if (MAY_USE_32BIT_ADDR(handler)) { - dasm_put(Dst, 53, (ptrdiff_t)(handler)); - } else { - if (IS_SIGNED_32BIT(handler)) { - dasm_put(Dst, 56, ((ptrdiff_t)handler)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); - } - dasm_put(Dst, 66); - } -#line 3700 "/home/jakub/prog/php/83/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, 97); - #endif -#line 3739 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_JMP handler, r0 - if (MAY_USE_32BIT_ADDR(handler)) { - dasm_put(Dst, 146, (ptrdiff_t)(handler)); - } else { - if (IS_SIGNED_32BIT(handler)) { - dasm_put(Dst, 56, ((ptrdiff_t)handler)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); - } - dasm_put(Dst, 150); - } -#line 3740 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(handler)); - } else { - if (IS_SIGNED_32BIT(handler)) { - dasm_put(Dst, 56, ((ptrdiff_t)handler)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); - } - dasm_put(Dst, 66); - } -#line 3744 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| ADD_HYBRID_SPAD - #ifndef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE - dasm_put(Dst, 97); - #endif -#line 3745 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 3746 "/home/jakub/prog/php/83/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, 115); -#line 3752 "/home/jakub/prog/php/83/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, 1889); -#line 3757 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| EXT_JMP handler, r0 - if (MAY_USE_32BIT_ADDR(handler)) { - dasm_put(Dst, 146, (ptrdiff_t)(handler)); - } else { - if (IS_SIGNED_32BIT(handler)) { - dasm_put(Dst, 56, ((ptrdiff_t)handler)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)handler)), (unsigned int)((((ptrdiff_t)handler))>>32)); - } - dasm_put(Dst, 150); - } -#line 3759 "/home/jakub/prog/php/83/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, 1877, opline); - } else { - dasm_put(Dst, 1883, Dt1(->opline), opline); - } -#line 3773 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 3774 "/home/jakub/prog/php/83/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, 1614, target_label); -#line 3783 "/home/jakub/prog/php/83/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, 1877, next_opline); - } else { - dasm_put(Dst, 1883, Dt1(->opline), next_opline); - } -#line 3789 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne =>target_label - dasm_put(Dst, 1908, target_label); -#line 3790 "/home/jakub/prog/php/83/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, 1912); -#line 3802 "/home/jakub/prog/php/83/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, 1877, next_opline); - } else { - dasm_put(Dst, 1883, Dt1(->opline), next_opline); - } -#line 3806 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| je =>next_block - //| call ->context_threaded_call - dasm_put(Dst, 1916, next_block); -#line 3808 "/home/jakub/prog/php/83/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, 1782, (Z_REG(src)), (Z_REG(dst))); - } else { - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (Z_REG(src)), (Z_REG(dst)), Z_OFFSET(dst)); - } -#line 3829 "/home/jakub/prog/php/83/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, 1684, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_LONG); -#line 3834 "/home/jakub/prog/php/83/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, 1933, (Z_REG(dst)-ZREG_XMM0), (Z_REG(src)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(src)-ZREG_XMM0), (Z_REG(dst)), Z_OFFSET(dst)); - } else { - dasm_put(Dst, 1965, (Z_REG(src)-ZREG_XMM0), (Z_REG(dst)), Z_OFFSET(dst)); - } - } -#line 3837 "/home/jakub/prog/php/83/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, 1684, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_DOUBLE); -#line 3842 "/home/jakub/prog/php/83/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, 1760, (Z_REG(dst)), (Z_REG(dst))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(src)))) { - dasm_put(Dst, 1768, (Z_REG(dst)), (unsigned int)(Z_LVAL_P(Z_ZV(src))), (unsigned int)((Z_LVAL_P(Z_ZV(src)))>>32)); - } else { - dasm_put(Dst, 1775, (Z_REG(dst)), Z_LVAL_P(Z_ZV(src))); - } - } - } else if (Z_MODE(src) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(src)), (Z_REG(dst))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 3856 "/home/jakub/prog/php/83/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, 1978, (Z_REG(dst)-ZREG_XMM0), Z_ZV(src)); - } else { - dasm_put(Dst, 1988, (Z_REG(dst)-ZREG_XMM0), Z_ZV(src)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(src))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(src))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(src))), (unsigned int)((((ptrdiff_t)Z_ZV(src)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(dst)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(dst)-ZREG_XMM0)); - } - } - } else if (Z_MODE(src) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(dst)-ZREG_XMM0), (Z_REG(src)), Z_OFFSET(src)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(dst)-ZREG_XMM0), (Z_REG(src)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (Z_REG(dst)-ZREG_XMM0), (Z_REG(src)-ZREG_XMM0)); - } - } else { - ZEND_UNREACHABLE(); - } - } -#line 3858 "/home/jakub/prog/php/83/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, 1684, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), type); -#line 3877 "/home/jakub/prog/php/83/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, uint8_t 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, 1684, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_UNDEF); -#line 3919 "/home/jakub/prog/php/83/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, 1782, (Z_REG(src)), (Z_REG(dst))); -#line 3930 "/home/jakub/prog/php/83/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, 1933, (Z_REG(dst)-ZREG_XMM0), (Z_REG(src)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (Z_REG(dst)-ZREG_XMM0), (Z_REG(src)-ZREG_XMM0)); - } -#line 3932 "/home/jakub/prog/php/83/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, 336, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_UNDEF); -#line 3991 "/home/jakub/prog/php/83/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 4007 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GET_ZVAL_PTR r0, val_addr - dasm_put(Dst, 2041, (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 4008 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GC_ADDREF r0 - //|2: - dasm_put(Dst, 2055, (Z_REG(val_addr)), Z_OFFSET(val_addr)); -#line 4010 "/home/jakub/prog/php/83/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, 1569, ((ptrdiff_t)(opline - 1))); - } else { - dasm_put(Dst, 1574, (unsigned int)(((ptrdiff_t)(opline - 1))), (unsigned int)((((ptrdiff_t)(opline - 1)))>>32)); - } - } else { - if (IS_SIGNED_32BIT((opline - 1))) { - dasm_put(Dst, 313, Dt1(->opline), ((ptrdiff_t)(opline - 1))); - } else { - dasm_put(Dst, 1579, (unsigned int)(((ptrdiff_t)(opline - 1))), (unsigned int)((((ptrdiff_t)(opline - 1)))>>32), Dt1(->opline)); - } - } -#line 4013 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->trace_escape - //|1: - dasm_put(Dst, 2068); -#line 4015 "/home/jakub/prog/php/83/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, 2075, (Z_REG(dst))); - } else { - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); - dasm_put(Dst, 2085, (Z_REG(dst)), Z_OFFSET(dst)); - } -#line 4026 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_W2 dst, 0xc3e00000 - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); -#line 4027 "/home/jakub/prog/php/83/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, 2097, (Z_REG(dst)), Z_OFFSET(dst)+4); - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_DOUBLE); -#line 4032 "/home/jakub/prog/php/83/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, 2075, (Z_REG(dst))); - } else { - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); - dasm_put(Dst, 2085, (Z_REG(dst)), Z_OFFSET(dst)); - } -#line 4035 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_W2 dst, 0x80000000 - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); -#line 4036 "/home/jakub/prog/php/83/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, 2109, (Z_REG(dst)), Z_OFFSET(dst)+4); - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_LONG); -#line 4040 "/home/jakub/prog/php/83/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, 2121, (Z_REG(dst))); - } else { - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); - dasm_put(Dst, 2135, (Z_REG(dst)), Z_OFFSET(dst)); - } -#line 4043 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_W2 dst, 0x7fffffff - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); -#line 4044 "/home/jakub/prog/php/83/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, 2151, (Z_REG(dst)), Z_OFFSET(dst)+4); - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_LONG); -#line 4048 "/home/jakub/prog/php/83/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, 2075, (Z_REG(dst))); - } else { - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); - dasm_put(Dst, 2085, (Z_REG(dst)), Z_OFFSET(dst)); - } -#line 4051 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_W2 dst, 0x43e00000 - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); -#line 4052 "/home/jakub/prog/php/83/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, 2166, (Z_REG(dst)), Z_OFFSET(dst)+4); - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_DOUBLE); -#line 4057 "/home/jakub/prog/php/83/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, 1684, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info), IS_NULL); -#line 4059 "/home/jakub/prog/php/83/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 4061 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GET_ZVAL_PTR r1, dst - dasm_put(Dst, 2178, (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); -#line 4062 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GC_ADDREF r1 - //|1: - dasm_put(Dst, 2192, (Z_REG(dst)), Z_OFFSET(dst)); -#line 4064 "/home/jakub/prog/php/83/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, 1782, (Z_REG(val_addr)), (Z_REG(dst))); - } else { - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(dst)), (Z_REG(dst))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(dst)), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(val_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(dst) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(dst))); - } else { - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(dst)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(dst)), Z_OFFSET(dst)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(dst)-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(dst)-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(dst)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(dst)-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(dst)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(dst)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(dst)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(dst)), Z_OFFSET(dst)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(dst)), Z_OFFSET(dst)); - } else { - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(-1); - ZEND_ASSERT(Z_MODE(dst) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R1), (Z_REG(dst)), Z_OFFSET(dst)+offsetof(zval,u1.type_info)); - } -#line 4068 "/home/jakub/prog/php/83/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, 2225); - } - dasm_put(Dst, 2233); - } -#line 4069 "/home/jakub/prog/php/83/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, 2239, offsetof(zend_function, common.fn_flags), ZEND_ACC_CALL_VIA_TRAMPOLINE); - if (MAY_USE_32BIT_ADDR(zend_jit_free_trampoline_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_free_trampoline_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_free_trampoline_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_free_trampoline_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_free_trampoline_helper)), (unsigned int)((((ptrdiff_t)zend_jit_free_trampoline_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 4082 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 4083 "/home/jakub/prog/php/83/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, 2252, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 4090 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R1), (ZREG_R1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R1), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(MAY_BE_LONG); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 4093 "/home/jakub/prog/php/83/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, 2265, (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, 2274, (Z_REG(op1_def_addr)), Z_L(1)); - } else { - ZEND_UNREACHABLE(); - } -#line 4099 "/home/jakub/prog/php/83/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, 2281, (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, 2290, (Z_REG(op1_def_addr)), Z_L(1)); - } else { - ZEND_UNREACHABLE(); - } -#line 4101 "/home/jakub/prog/php/83/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, 2297, (ptrdiff_t)(exit_addr)); -#line 4142 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_def_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (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, 1674, (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, 1782, (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, 1760, (ZREG_R1), (ZREG_R1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R1), Z_LVAL_P(Z_ZV(op1_def_addr))); - } - } - } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_def_addr)), (ZREG_R1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R1), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_def_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_def_addr))); - } else { - dasm_put(Dst, 61, (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, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_def_addr))); - } else { - dasm_put(Dst, 61, (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, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(MAY_BE_LONG); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 4146 "/home/jakub/prog/php/83/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, 2301); -#line 4154 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_def_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (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, 1674, (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, 1782, (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, 1760, (ZREG_R1), (ZREG_R1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R1), Z_LVAL_P(Z_ZV(op1_def_addr))); - } - } - } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_def_addr)), (ZREG_R1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R1), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_def_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_def_addr))); - } else { - dasm_put(Dst, 61, (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, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_def_addr))); - } else { - dasm_put(Dst, 61, (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, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(MAY_BE_LONG); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 4157 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.cold_code - dasm_put(Dst, 276); -#line 4159 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 4160 "/home/jakub/prog/php/83/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, 61, (unsigned int)(0x43e0000000000000), (unsigned int)((0x43e0000000000000)>>32)); - if (Z_MODE(op1_def_addr) == IS_REG) { - dasm_put(Dst, 2306, (Z_REG(op1_def_addr))); - } else { - ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - } -#line 4164 "/home/jakub/prog/php/83/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, 61, (unsigned int)(0xc3e0000000000000), (unsigned int)((0xc3e0000000000000)>>32)); - if (Z_MODE(op1_def_addr) == IS_REG) { - dasm_put(Dst, 2306, (Z_REG(op1_def_addr))); - } else { - ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - } -#line 4172 "/home/jakub/prog/php/83/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, 1684, (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); -#line 4179 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_def_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (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, 1674, (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, 1782, (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, 1760, (ZREG_R1), (ZREG_R1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R1), Z_LVAL_P(Z_ZV(op1_def_addr))); - } - } - } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_def_addr)), (ZREG_R1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R1), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_def_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_def_addr))); - } else { - dasm_put(Dst, 61, (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, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_def_addr))); - } else { - dasm_put(Dst, 61, (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, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(MAY_BE_DOUBLE); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 4183 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jmp >3 - //|.code - dasm_put(Dst, 2320); -#line 4186 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_def_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (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, 1674, (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, 1782, (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, 1760, (ZREG_R1), (ZREG_R1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_def_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R1), Z_LVAL_P(Z_ZV(op1_def_addr))); - } - } - } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_def_addr)), (ZREG_R1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R1), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_def_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_def_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_def_addr))); - } else { - dasm_put(Dst, 61, (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, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_def_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_def_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_def_addr))); - } else { - dasm_put(Dst, 61, (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, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_def_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_def_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R1), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(MAY_BE_LONG); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 4190 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_LONG)) { - //|.cold_code - dasm_put(Dst, 276); -#line 4194 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 4195 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 4197 "/home/jakub/prog/php/83/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 4199 "/home/jakub/prog/php/83/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, 2326, (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, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 4202 "/home/jakub/prog/php/83/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, 1684, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_NULL); -#line 4203 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - op1_info |= MAY_BE_NULL; - } - //|2: - //| LOAD_ZVAL_ADDR FCARG1a, op1_addr - dasm_put(Dst, 2065); - if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4207 "/home/jakub/prog/php/83/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, 2355, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, sources.ptr)); -#line 4214 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4216 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| xor FCARG2a, FCARG2a - dasm_put(Dst, 2390); -#line 4218 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_pre_inc_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_pre_inc_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_pre_inc_typed_ref)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_pre_inc_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_pre_inc_typed_ref))>>32)); - } - dasm_put(Dst, 66); - } -#line 4221 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_pre_dec_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_pre_dec_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_pre_dec_typed_ref)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_pre_dec_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_pre_dec_typed_ref))>>32)); - } - dasm_put(Dst, 66); - } -#line 4223 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_post_inc_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_post_inc_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_post_inc_typed_ref)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_post_inc_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_post_inc_typed_ref))>>32)); - } - dasm_put(Dst, 66); - } -#line 4225 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_post_dec_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_post_dec_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_post_dec_typed_ref)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_post_dec_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_post_dec_typed_ref))>>32)); - } - dasm_put(Dst, 66); - } -#line 4227 "/home/jakub/prog/php/83/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, 2395, offsetof(zend_reference, val)); -#line 4235 "/home/jakub/prog/php/83/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, 1782, (Z_REG(val_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(val_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 4241 "/home/jakub/prog/php/83/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, 2408); - } - dasm_put(Dst, 2233); - } -#line 4242 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4246 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_pre_inc)); - } else { - if (IS_SIGNED_32BIT(zend_jit_pre_inc)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_pre_inc)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_pre_inc)), (unsigned int)((((ptrdiff_t)zend_jit_pre_inc))>>32)); - } - dasm_put(Dst, 66); - } -#line 4247 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| EXT_CALL increment_function, r0 - if (MAY_USE_32BIT_ADDR(increment_function)) { - dasm_put(Dst, 53, (ptrdiff_t)(increment_function)); - } else { - if (IS_SIGNED_32BIT(increment_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)increment_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)increment_function)), (unsigned int)((((ptrdiff_t)increment_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 4249 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4253 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_pre_dec)); - } else { - if (IS_SIGNED_32BIT(zend_jit_pre_dec)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_pre_dec)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_pre_dec)), (unsigned int)((((ptrdiff_t)zend_jit_pre_dec))>>32)); - } - dasm_put(Dst, 66); - } -#line 4254 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| EXT_CALL decrement_function, r0 - if (MAY_USE_32BIT_ADDR(decrement_function)) { - dasm_put(Dst, 53, (ptrdiff_t)(decrement_function)); - } else { - if (IS_SIGNED_32BIT(decrement_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)decrement_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)decrement_function)), (unsigned int)((((ptrdiff_t)decrement_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 4256 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(MAY_BE_DOUBLE); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 4266 "/home/jakub/prog/php/83/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, 1978, (tmp_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (tmp_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (tmp_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (tmp_reg-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } - } else { - ZEND_UNREACHABLE(); - } - } -#line 4275 "/home/jakub/prog/php/83/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, 2415, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); -#line 4278 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| addsd xmm(tmp_reg-ZREG_XMM0), qword [->one] - dasm_put(Dst, 2427, (tmp_reg-ZREG_XMM0)); -#line 4280 "/home/jakub/prog/php/83/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, 2438, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); -#line 4284 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| subsd xmm(tmp_reg-ZREG_XMM0), qword [->one] - dasm_put(Dst, 2450, (tmp_reg-ZREG_XMM0)); -#line 4286 "/home/jakub/prog/php/83/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, 1933, (Z_REG(op1_def_addr)-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (tmp_reg-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - } else { - dasm_put(Dst, 1965, (tmp_reg-ZREG_XMM0), (Z_REG(op1_def_addr)), Z_OFFSET(op1_def_addr)); - } - } -#line 4289 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R1), (ZREG_R1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R1), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_def_info); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 4292 "/home/jakub/prog/php/83/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, 2408); - } - dasm_put(Dst, 2199); - } -#line 4293 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - //| jmp >3 - //|.code - dasm_put(Dst, 2320); -#line 4297 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|3: - dasm_put(Dst, 333); -#line 4299 "/home/jakub/prog/php/83/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, - uint8_t 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, 2461, (result_reg), (Z_REG(op1_addr)), (Z_REG(op1_addr)), 0); -#line 4393 "/home/jakub/prog/php/83/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, 1760, (result_reg), (result_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (result_reg)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4395 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| add Ra(result_reg), Ra(result_reg) - dasm_put(Dst, 2474, (result_reg), (result_reg)); -#line 4396 "/home/jakub/prog/php/83/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, 1760, (result_reg), (result_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (result_reg)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4403 "/home/jakub/prog/php/83/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, 2482, (result_reg), zend_long_floor_log2(Z_LVAL_P(Z_ZV(op2_addr)))); -#line 4404 "/home/jakub/prog/php/83/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, 2461, (result_reg), (Z_REG(op2_addr)), (Z_REG(op2_addr)), 0); -#line 4409 "/home/jakub/prog/php/83/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, 1760, (result_reg), (result_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (result_reg)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4411 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| add Ra(result_reg), Ra(result_reg) - dasm_put(Dst, 2474, (result_reg), (result_reg)); -#line 4412 "/home/jakub/prog/php/83/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, 1760, (result_reg), (result_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (result_reg)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4419 "/home/jakub/prog/php/83/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, 2482, (result_reg), zend_long_floor_log2(Z_LVAL_P(Z_ZV(op1_addr)))); -#line 4420 "/home/jakub/prog/php/83/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, 1760, (result_reg), (result_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (result_reg)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4424 "/home/jakub/prog/php/83/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, 2489, (result_reg), zend_long_floor_log2(Z_LVAL_P(Z_ZV(op2_addr)))); -#line 4425 "/home/jakub/prog/php/83/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, 2496, (result_reg), (Z_REG(op1_addr)), Z_LVAL_P(Z_ZV(op2_addr))); -#line 4431 "/home/jakub/prog/php/83/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, 2496, (result_reg), (Z_REG(op2_addr)), Z_LVAL_P(Z_ZV(op1_addr))); -#line 4437 "/home/jakub/prog/php/83/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, 2496, (result_reg), (Z_REG(op1_addr)), -Z_LVAL_P(Z_ZV(op2_addr))); -#line 4443 "/home/jakub/prog/php/83/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, 1760, (result_reg), (result_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (result_reg)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4445 "/home/jakub/prog/php/83/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, 2474, (result_reg), (result_reg)); - break; - case ZEND_SUB: - dasm_put(Dst, 2506, (result_reg), (result_reg)); - break; - case ZEND_MUL: - dasm_put(Dst, 2514, (result_reg), (result_reg)); - break; - case ZEND_BW_OR: - dasm_put(Dst, 2523, (result_reg), (result_reg)); - break; - case ZEND_BW_AND: - dasm_put(Dst, 2531, (result_reg), (result_reg)); - break; - case ZEND_BW_XOR: - dasm_put(Dst, 1760, (result_reg), (result_reg)); - break; - default: - ZEND_UNREACHABLE(); - } -#line 4452 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - zend_reg tmp_reg; - - if (Z_MODE(res_addr) == IS_MEM_ZVAL) { - if (Z_REG(res_addr) != ZREG_R0 && result_reg != ZREG_R0) { - tmp_reg = ZREG_R0; - } else if (Z_REG(res_addr) != ZREG_R1 && result_reg != ZREG_R1) { - tmp_reg = ZREG_R1; - } else { - tmp_reg = ZREG_R2; - } - } 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, 2539, (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, 2274, (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, 2474, (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, 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, 2290, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2577, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2506, (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, 2587, (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, 2602, (result_reg), (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2611, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2514, (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, 2622, (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, 2636, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2643, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2523, (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, 2653, (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, 2667, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2674, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2531, (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, 2684, (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, 2698, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2706, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 1760, (Z_REG(op2_addr)), (result_reg)); - } else { - ZEND_UNREACHABLE(); - } - break; - default: - ZEND_UNREACHABLE(); - } -#line 4469 "/home/jakub/prog/php/83/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, 2297, (ptrdiff_t)(exit_addr)); -#line 4481 "/home/jakub/prog/php/83/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, 1782, (result_reg), (Z_REG(res_addr))); -#line 4483 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if ((res_info & MAY_BE_ANY) == MAY_BE_DOUBLE) { - //| jno &exit_addr - dasm_put(Dst, 2716, (ptrdiff_t)(exit_addr)); -#line 4486 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - ZEND_UNREACHABLE(); - } - } else { - if (res_info & MAY_BE_LONG) { - //| jo >1 - dasm_put(Dst, 2301); -#line 4492 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jno >1 - dasm_put(Dst, 2720); -#line 4494 "/home/jakub/prog/php/83/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, 1782, (result_reg), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (result_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } -#line 4500 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); -#line 4503 "/home/jakub/prog/php/83/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, 276); -#line 4513 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 4514 "/home/jakub/prog/php/83/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, 1768, (tmp_reg), (unsigned int)(0x43e0000000000000), (unsigned int)((0x43e0000000000000)>>32)); -#line 4523 "/home/jakub/prog/php/83/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, 2725, (Z_REG(res_addr)-ZREG_XMM0), (tmp_reg)); -#line 4525 "/home/jakub/prog/php/83/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, 1782, (tmp_reg), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } -#line 4527 "/home/jakub/prog/php/83/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, 1768, (tmp_reg), (unsigned int)(0xc3e0000000000000), (unsigned int)((0xc3e0000000000000)>>32)); -#line 4536 "/home/jakub/prog/php/83/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, 2725, (Z_REG(res_addr)-ZREG_XMM0), (tmp_reg)); -#line 4538 "/home/jakub/prog/php/83/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, 1782, (tmp_reg), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } -#line 4540 "/home/jakub/prog/php/83/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, 2735, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (tmp_reg), Z_LVAL_P(Z_ZV(op1_addr))); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 2799, (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, 2825, (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, 2756, (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, 2780, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4550 "/home/jakub/prog/php/83/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, 2735, (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (tmp_reg), Z_LVAL_P(Z_ZV(op2_addr))); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 2799, (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, 2825, (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, 2756, (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, 2780, (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (tmp_reg2-ZREG_XMM0), (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4551 "/home/jakub/prog/php/83/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, 2846, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); - break; - case ZEND_SUB: - dasm_put(Dst, 2858, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); - break; - case ZEND_MUL: - dasm_put(Dst, 2870, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); - break; - case ZEND_DIV: - dasm_put(Dst, 2882, (tmp_reg1-ZREG_XMM0), (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); - break; - } -#line 4553 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| SSE_MATH_REG opcode, tmp_reg1, tmp_reg2 - switch (opcode) { - case ZEND_ADD: - dasm_put(Dst, 2894, (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); - break; - case ZEND_SUB: - dasm_put(Dst, 2905, (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); - break; - case ZEND_MUL: - dasm_put(Dst, 2916, (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); - break; - case ZEND_DIV: - dasm_put(Dst, 2927, (tmp_reg1-ZREG_XMM0), (tmp_reg2-ZREG_XMM0)); - break; - } -#line 4555 "/home/jakub/prog/php/83/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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (tmp_reg1-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (tmp_reg1-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (tmp_reg1-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } - } -#line 4557 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); -#line 4562 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (res_info & MAY_BE_LONG) { - //| jmp >2 - //|.code - dasm_put(Dst, 2938); -#line 4566 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|2: - dasm_put(Dst, 2065); -#line 4568 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - return 1; -} - -static int zend_jit_math_long_double(dasm_State **Dst, - uint8_t 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, 2735, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (tmp_reg), Z_LVAL_P(Z_ZV(op1_addr))); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 2799, (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, 2825, (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, 2756, (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, 2780, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4592 "/home/jakub/prog/php/83/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, 2944, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 2956, (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, 2970, (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, 2846, (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, 2984, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 2996, (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, 3010, (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, 2858, (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, 3024, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 3036, (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, 3050, (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, 2870, (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, 3064, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 3076, (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, 3090, (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, 2882, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); - } else { - ZEND_UNREACHABLE(); - } - break; - } -#line 4597 "/home/jakub/prog/php/83/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, 3104, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 3115, (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, 3128, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2894, (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, 3141, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 3152, (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, 3165, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2905, (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, 3178, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 3189, (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, 3202, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2916, (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, 3215, (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, 3239, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2927, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); - } else { - ZEND_UNREACHABLE(); - } - break; - } -#line 4599 "/home/jakub/prog/php/83/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, 2944, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 3252, (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, 2970, (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, 2846, (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, 2984, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 3266, (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, 3010, (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, 2858, (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, 3024, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 3280, (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, 3050, (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, 2870, (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, 3064, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 3294, (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, 3090, (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, 2882, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); - } else { - ZEND_UNREACHABLE(); - } - break; - } -#line 4603 "/home/jakub/prog/php/83/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, 3104, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 3308, (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, 3128, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2894, (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, 3141, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 3321, (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, 3165, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2905, (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, 3178, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 3334, (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, 3202, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2916, (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, 3215, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 3347, (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, 3239, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2927, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); - } else { - ZEND_UNREACHABLE(); - } - break; - } -#line 4605 "/home/jakub/prog/php/83/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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (result_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (result_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (result_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } - } -#line 4608 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); -#line 4612 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - return 1; -} - -static int zend_jit_math_double_long(dasm_State **Dst, - uint8_t 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, 2735, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (tmp_reg_gp), Z_LVAL_P(Z_ZV(op2_addr))); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 2799, (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, 2825, (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, 2756, (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, 2780, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4642 "/home/jakub/prog/php/83/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, 2944, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 2956, (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, 2970, (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, 2846, (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, 2984, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 2996, (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, 3010, (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, 2858, (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, 3024, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 3036, (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, 3050, (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, 2870, (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, 3064, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 3076, (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, 3090, (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, 2882, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - ZEND_UNREACHABLE(); - } - break; - } -#line 4646 "/home/jakub/prog/php/83/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, 3104, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 3115, (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, 3128, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else if (Z_MODE(op1_addr) == IS_REG) { - dasm_put(Dst, 2894, (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, 3141, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 3152, (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, 3165, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else if (Z_MODE(op1_addr) == IS_REG) { - dasm_put(Dst, 2905, (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, 3178, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 3189, (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, 3202, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else if (Z_MODE(op1_addr) == IS_REG) { - dasm_put(Dst, 2916, (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, 3215, (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, 3239, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else if (Z_MODE(op1_addr) == IS_REG) { - dasm_put(Dst, 2927, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - ZEND_UNREACHABLE(); - } - break; - } -#line 4648 "/home/jakub/prog/php/83/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, 2944, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 3252, (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, 2970, (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, 2846, (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, 2984, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 3266, (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, 3010, (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, 2858, (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, 3024, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 3280, (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, 3050, (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, 2870, (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, 3064, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 3294, (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, 3090, (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, 2882, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - ZEND_UNREACHABLE(); - } - break; - } -#line 4652 "/home/jakub/prog/php/83/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, 3104, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 3308, (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, 3128, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else if (Z_MODE(op1_addr) == IS_REG) { - dasm_put(Dst, 2894, (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, 3141, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 3321, (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, 3165, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else if (Z_MODE(op1_addr) == IS_REG) { - dasm_put(Dst, 2905, (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, 3178, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 3334, (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, 3202, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else if (Z_MODE(op1_addr) == IS_REG) { - dasm_put(Dst, 2916, (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, 3215, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 3347, (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, 3239, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else if (Z_MODE(op1_addr) == IS_REG) { - dasm_put(Dst, 2927, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - ZEND_UNREACHABLE(); - } - break; - } -#line 4654 "/home/jakub/prog/php/83/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, 1978, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (result_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (result_reg-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } - } else { - ZEND_UNREACHABLE(); - } - } -#line 4676 "/home/jakub/prog/php/83/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, 2735, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (tmp_reg_gp), Z_LVAL_P(Z_ZV(op2_addr))); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 2799, (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, 2825, (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, 2756, (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, 2780, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4684 "/home/jakub/prog/php/83/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, 2846, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - break; - case ZEND_SUB: - dasm_put(Dst, 2858, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - break; - case ZEND_MUL: - dasm_put(Dst, 2870, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - break; - case ZEND_DIV: - dasm_put(Dst, 2882, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - break; - } -#line 4685 "/home/jakub/prog/php/83/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, 1978, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (result_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (result_reg-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } - } else { - ZEND_UNREACHABLE(); - } - } -#line 4688 "/home/jakub/prog/php/83/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, 2735, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (tmp_reg_gp), Z_LVAL_P(Z_ZV(op2_addr))); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 2799, (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, 2825, (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, 2756, (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, 2780, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4694 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SSE_MATH_REG opcode, result_reg, tmp_reg - switch (opcode) { - case ZEND_ADD: - dasm_put(Dst, 2894, (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - break; - case ZEND_SUB: - dasm_put(Dst, 2905, (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - break; - case ZEND_MUL: - dasm_put(Dst, 2916, (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - break; - case ZEND_DIV: - dasm_put(Dst, 2927, (result_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - break; - } -#line 4695 "/home/jakub/prog/php/83/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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (result_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (result_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (result_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } - } -#line 4699 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); -#line 4704 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - } - - return 1; -} - -static int zend_jit_math_double_double(dasm_State **Dst, - uint8_t 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, 1978, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (result_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (result_reg-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } - } else { - ZEND_UNREACHABLE(); - } - } -#line 4743 "/home/jakub/prog/php/83/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, 2846, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (op1_reg-ZREG_XMM0)); - break; - case ZEND_SUB: - dasm_put(Dst, 2858, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (op1_reg-ZREG_XMM0)); - break; - case ZEND_MUL: - dasm_put(Dst, 2870, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (op1_reg-ZREG_XMM0)); - break; - case ZEND_DIV: - dasm_put(Dst, 2882, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (op1_reg-ZREG_XMM0)); - break; - } -#line 4749 "/home/jakub/prog/php/83/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, 2944, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 2956, (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, 2970, (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, 2846, (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, 2984, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 2996, (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, 3010, (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, 2858, (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, 3024, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 3036, (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, 3050, (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, 2870, (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, 3064, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 3076, (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, 3090, (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, 2882, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - ZEND_UNREACHABLE(); - } - break; - } -#line 4752 "/home/jakub/prog/php/83/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, 2944, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 3252, (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, 2970, (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, 2846, (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, 2984, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 3266, (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, 3010, (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, 2858, (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, 3024, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 3280, (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, 3050, (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, 2870, (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, 3064, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 3294, (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, 3090, (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, 2882, (op1_reg-ZREG_XMM0), (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - ZEND_UNREACHABLE(); - } - break; - } -#line 4754 "/home/jakub/prog/php/83/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, 1978, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 1988, (result_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (result_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (result_reg-ZREG_XMM0)); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (result_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); - } - } else { - ZEND_UNREACHABLE(); - } - } -#line 4760 "/home/jakub/prog/php/83/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, 1978, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (result_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (result_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (result_reg-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (result_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } - } else { - ZEND_UNREACHABLE(); - } - } -#line 4763 "/home/jakub/prog/php/83/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, 2894, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); - break; - case ZEND_SUB: - dasm_put(Dst, 2905, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); - break; - case ZEND_MUL: - dasm_put(Dst, 2916, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); - break; - case ZEND_DIV: - dasm_put(Dst, 2927, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); - break; - } -#line 4767 "/home/jakub/prog/php/83/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, 2894, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); - break; - case ZEND_SUB: - dasm_put(Dst, 2905, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); - break; - case ZEND_MUL: - dasm_put(Dst, 2916, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); - break; - case ZEND_DIV: - dasm_put(Dst, 2927, (result_reg-ZREG_XMM0), (result_reg-ZREG_XMM0)); - break; - } -#line 4770 "/home/jakub/prog/php/83/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, 3104, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 3115, (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, 3128, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else if (Z_MODE(val_addr) == IS_REG) { - dasm_put(Dst, 2894, (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, 3141, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 3152, (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, 3165, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else if (Z_MODE(val_addr) == IS_REG) { - dasm_put(Dst, 2905, (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, 3178, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 3189, (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, 3202, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else if (Z_MODE(val_addr) == IS_REG) { - dasm_put(Dst, 2916, (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, 3215, (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, 3239, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else if (Z_MODE(val_addr) == IS_REG) { - dasm_put(Dst, 2927, (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - ZEND_UNREACHABLE(); - } - break; - } -#line 4773 "/home/jakub/prog/php/83/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, 3104, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 3308, (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, 3128, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else if (Z_MODE(val_addr) == IS_REG) { - dasm_put(Dst, 2894, (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, 3141, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 3321, (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, 3165, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else if (Z_MODE(val_addr) == IS_REG) { - dasm_put(Dst, 2905, (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, 3178, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 3334, (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, 3202, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else if (Z_MODE(val_addr) == IS_REG) { - dasm_put(Dst, 2916, (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, 3215, (result_reg-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 3347, (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, 3239, (result_reg-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else if (Z_MODE(val_addr) == IS_REG) { - dasm_put(Dst, 2927, (result_reg-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - ZEND_UNREACHABLE(); - } - break; - } -#line 4775 "/home/jakub/prog/php/83/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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (result_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (result_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (result_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } - } -#line 4778 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); -#line 4783 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - } - - return 1; -} - -static int zend_jit_math_helper(dasm_State **Dst, - const zend_op *opline, - uint8_t opcode, - uint8_t op1_type, - znode_op op1, - zend_jit_addr op1_addr, - uint32_t op1_info, - uint8_t 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, 3360, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 4815 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 4817 "/home/jakub/prog/php/83/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 4822 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 3386, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 4823 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 4824 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 4826 "/home/jakub/prog/php/83/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, 3400); -#line 4832 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 4834 "/home/jakub/prog/php/83/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, 276); -#line 4841 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|3: - dasm_put(Dst, 333); -#line 4842 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 4844 "/home/jakub/prog/php/83/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, 336, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 4849 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 4851 "/home/jakub/prog/php/83/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, 3406); -#line 4857 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (!same_ops) { - //|1: - dasm_put(Dst, 70); -#line 4860 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 4862 "/home/jakub/prog/php/83/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, 3406); -#line 4867 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.code - dasm_put(Dst, 373); -#line 4869 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 4876 "/home/jakub/prog/php/83/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, 336, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 4881 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 4883 "/home/jakub/prog/php/83/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, 276); -#line 4892 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|1: - dasm_put(Dst, 70); -#line 4894 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 4896 "/home/jakub/prog/php/83/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, 3400); -#line 4903 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 4911 "/home/jakub/prog/php/83/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, 336, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 4916 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 4918 "/home/jakub/prog/php/83/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, 276); -#line 4927 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|1: - dasm_put(Dst, 70); -#line 4929 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 4931 "/home/jakub/prog/php/83/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, 3400); -#line 4938 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - } - - //|5: - dasm_put(Dst, 509); -#line 4943 "/home/jakub/prog/php/83/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, 276); -#line 4950 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|6: - dasm_put(Dst, 3411); -#line 4952 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(real_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(real_addr)), Z_OFFSET(real_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(real_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4956 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4958 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4967 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4976 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(real_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(real_addr)), Z_OFFSET(real_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(real_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4979 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4981 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 4993 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 4998 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(add_function)); - } else { - if (IS_SIGNED_32BIT(add_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)add_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)add_function)), (unsigned int)((((ptrdiff_t)add_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 5000 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(sub_function)); - } else { - if (IS_SIGNED_32BIT(sub_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)sub_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)sub_function)), (unsigned int)((((ptrdiff_t)sub_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 5002 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(mul_function)); - } else { - if (IS_SIGNED_32BIT(mul_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)mul_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)mul_function)), (unsigned int)((((ptrdiff_t)mul_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 5004 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(div_function)); - } else { - if (IS_SIGNED_32BIT(div_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)div_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)div_function)), (unsigned int)((((ptrdiff_t)div_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 5006 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 5013 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 5014 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 5017 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne ->exception_handler_free_op2 - dasm_put(Dst, 3438, (executor_globals_offset+offsetof(zend_executor_globals, exception))); -#line 5018 "/home/jakub/prog/php/83/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, 3448); -#line 5035 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5060 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG2), (ZREG_FCARG2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (ZREG_FCARG2)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5061 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG2), (ZREG_FCARG2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (ZREG_FCARG2)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5063 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5064 "/home/jakub/prog/php/83/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, 1760, (ZREG_R0), (ZREG_R0)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R0), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (ZREG_R0)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5066 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5067 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG2a, r0 - dasm_put(Dst, 3454); -#line 5068 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_add_arrays_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_add_arrays_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_add_arrays_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_add_arrays_helper)), (unsigned int)((((ptrdiff_t)zend_jit_add_arrays_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 5070 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_PTR res_addr, r0 - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 5071 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO res_addr, IS_ARRAY_EX - dasm_put(Dst, 2312, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 5072 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| FREE_OP opline->op1_type, opline->op1, op1_info, 0, opline - dasm_put(Dst, 1684, (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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 5073 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 5074 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - return 1; -} - -static int zend_jit_long_math_helper(dasm_State **Dst, - const zend_op *opline, - uint8_t opcode, - uint8_t op1_type, - znode_op op1, - zend_jit_addr op1_addr, - uint32_t op1_info, - zend_ssa_range *op1_range, - uint8_t 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, 3373, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 5102 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 5105 "/home/jakub/prog/php/83/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, 1760, (result_reg), (result_reg)); -#line 5138 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 5142 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->negative_shift - dasm_put(Dst, 3458); -#line 5143 "/home/jakub/prog/php/83/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, 2461, (result_reg), (Z_REG(op1_addr)), (Z_REG(op1_addr)), 0); -#line 5146 "/home/jakub/prog/php/83/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, 1760, (result_reg), (result_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (result_reg)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5148 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| shl Ra(result_reg), op2_lval - dasm_put(Dst, 2482, (result_reg), op2_lval); -#line 5149 "/home/jakub/prog/php/83/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, 1760, (ZREG_RCX), (ZREG_RCX)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_RCX), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (ZREG_RCX)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5153 "/home/jakub/prog/php/83/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, 3463, (SIZEOF_ZEND_LONG*8)); -#line 5160 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| cmp r1, 0 - //| mov Ra(result_reg), 0 - //| jg >1 - dasm_put(Dst, 3474, (result_reg)); -#line 5164 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 5167 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->negative_shift - //|.code - dasm_put(Dst, 3495); -#line 5169 "/home/jakub/prog/php/83/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, 1760, (result_reg), (result_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (result_reg)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5171 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| shl Ra(result_reg), cl - //|1: - dasm_put(Dst, 3501, (result_reg)); -#line 5173 "/home/jakub/prog/php/83/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, 1760, (result_reg), (result_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (result_reg)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5176 "/home/jakub/prog/php/83/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, 3509, (result_reg), (SIZEOF_ZEND_LONG * 8) - 1); -#line 5182 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 5186 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->negative_shift - dasm_put(Dst, 3458); -#line 5187 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| sar Ra(result_reg), op2_lval - dasm_put(Dst, 3509, (result_reg), op2_lval); -#line 5190 "/home/jakub/prog/php/83/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, 1760, (ZREG_RCX), (ZREG_RCX)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_RCX), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (ZREG_RCX)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5194 "/home/jakub/prog/php/83/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, 3463, (SIZEOF_ZEND_LONG*8)); -#line 5201 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| cmp r1, 0 - //| mov r1, (SIZEOF_ZEND_LONG * 8) - 1 - //| jg >1 - dasm_put(Dst, 3517, (SIZEOF_ZEND_LONG * 8) - 1); -#line 5205 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 5208 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->negative_shift - //|.code - dasm_put(Dst, 3495); -#line 5210 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|1: - //| sar Ra(result_reg), cl - dasm_put(Dst, 3533, (result_reg)); -#line 5213 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 5222 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->mod_by_zero - dasm_put(Dst, 3542); -#line 5223 "/home/jakub/prog/php/83/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, 1760, (result_reg), (result_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (result_reg)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5239 "/home/jakub/prog/php/83/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, 2539, (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, 2274, (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, 2474, (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, 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, 2290, (result_reg), Z_LVAL_P(Z_ZV(tmp_addr))); - } - } else if (Z_MODE(tmp_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2577, (result_reg), (Z_REG(tmp_addr)), Z_OFFSET(tmp_addr)); - } else if (Z_MODE(tmp_addr) == IS_REG) { - dasm_put(Dst, 2506, (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, 2587, (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, 2602, (result_reg), (result_reg), Z_LVAL_P(Z_ZV(tmp_addr))); - } - } else if (Z_MODE(tmp_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2611, (result_reg), (Z_REG(tmp_addr)), Z_OFFSET(tmp_addr)); - } else if (Z_MODE(tmp_addr) == IS_REG) { - dasm_put(Dst, 2514, (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, 2622, (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, 2636, (result_reg), Z_LVAL_P(Z_ZV(tmp_addr))); - } - } else if (Z_MODE(tmp_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2643, (result_reg), (Z_REG(tmp_addr)), Z_OFFSET(tmp_addr)); - } else if (Z_MODE(tmp_addr) == IS_REG) { - dasm_put(Dst, 2523, (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, 2653, (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, 2667, (result_reg), Z_LVAL_P(Z_ZV(tmp_addr))); - } - } else if (Z_MODE(tmp_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2674, (result_reg), (Z_REG(tmp_addr)), Z_OFFSET(tmp_addr)); - } else if (Z_MODE(tmp_addr) == IS_REG) { - dasm_put(Dst, 2531, (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, 2684, (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, 2698, (result_reg), Z_LVAL_P(Z_ZV(tmp_addr))); - } - } else if (Z_MODE(tmp_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2706, (result_reg), (Z_REG(tmp_addr)), Z_OFFSET(tmp_addr)); - } else if (Z_MODE(tmp_addr) == IS_REG) { - dasm_put(Dst, 1760, (Z_REG(tmp_addr)), (result_reg)); - } else { - ZEND_UNREACHABLE(); - } - break; - default: - ZEND_UNREACHABLE(); - } -#line 5240 "/home/jakub/prog/php/83/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, 3547); -#line 5244 "/home/jakub/prog/php/83/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, 3552, (ZREG_RCX)); -#line 5246 "/home/jakub/prog/php/83/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, 1760, (result_reg), (result_reg)); -#line 5250 "/home/jakub/prog/php/83/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, 1760, (ZREG_RAX), (ZREG_RAX)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_RAX), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_RAX)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5252 "/home/jakub/prog/php/83/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, 1760, (ZREG_RCX), (ZREG_RCX)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_RCX), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (ZREG_RCX)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5253 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.if X64 - //| cqo - //|.else - //| cdq - //|.endif - //| idiv Ra(ZREG_RCX) - dasm_put(Dst, 3559, (ZREG_RCX)); -#line 5259 "/home/jakub/prog/php/83/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, 3569); -#line 5262 "/home/jakub/prog/php/83/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, 3574, (ZREG_RCX)); -#line 5264 "/home/jakub/prog/php/83/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, 3581, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); -#line 5270 "/home/jakub/prog/php/83/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, 3590, (Z_REG(op2_addr)), (Z_REG(op2_addr))); -#line 5272 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jz >1 - //|.cold_code - dasm_put(Dst, 3598); -#line 5275 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 5276 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 5279 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->mod_by_zero - //|.code - dasm_put(Dst, 3604); -#line 5281 "/home/jakub/prog/php/83/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, 3610, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); -#line 5287 "/home/jakub/prog/php/83/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, 3620, (Z_REG(op2_addr))); -#line 5289 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jz >1 - //|.cold_code - dasm_put(Dst, 3598); -#line 5292 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| SET_ZVAL_LVAL res_addr, 0 - dasm_put(Dst, 70); - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 2075, (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2085, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } -#line 5294 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); -#line 5298 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - } - //| jmp >5 - //|.code - dasm_put(Dst, 3400); -#line 5303 "/home/jakub/prog/php/83/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, 3547); -#line 5307 "/home/jakub/prog/php/83/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, 1760, (ZREG_RAX), (ZREG_RAX)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_RAX), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_RAX)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5310 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.if X64 - //| cqo - //|.else - //| cdq - //|.endif - dasm_put(Dst, 3629); -#line 5315 "/home/jakub/prog/php/83/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, 3632, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); -#line 5317 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (Z_MODE(op2_addr) == IS_REG) { - //| idiv Ra(Z_REG(op2_addr)) - dasm_put(Dst, 3561, (Z_REG(op2_addr))); -#line 5319 "/home/jakub/prog/php/83/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, 3569); -#line 5322 "/home/jakub/prog/php/83/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, 1760, (result_reg), (result_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (result_reg)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5326 "/home/jakub/prog/php/83/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, 2474, (result_reg), (result_reg)); - break; - case ZEND_SUB: - dasm_put(Dst, 2506, (result_reg), (result_reg)); - break; - case ZEND_MUL: - dasm_put(Dst, 2514, (result_reg), (result_reg)); - break; - case ZEND_BW_OR: - dasm_put(Dst, 2523, (result_reg), (result_reg)); - break; - case ZEND_BW_AND: - dasm_put(Dst, 2531, (result_reg), (result_reg)); - break; - case ZEND_BW_XOR: - dasm_put(Dst, 1760, (result_reg), (result_reg)); - break; - default: - ZEND_UNREACHABLE(); - } -#line 5327 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - zend_reg tmp_reg; - - if (Z_MODE(res_addr) == IS_MEM_ZVAL) { - if (Z_REG(res_addr) != ZREG_R0 && result_reg != ZREG_R0) { - tmp_reg = ZREG_R0; - } else if (Z_REG(res_addr) != ZREG_R1 && result_reg != ZREG_R1) { - tmp_reg = ZREG_R1; - } else { - tmp_reg = ZREG_R2; - } - } else if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_R1) { - tmp_reg = ZREG_R0; - } 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, 1760, (result_reg), (result_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (result_reg), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (result_reg)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5346 "/home/jakub/prog/php/83/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, 2539, (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, 2274, (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, 2474, (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, 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, 2290, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2577, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2506, (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, 2587, (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, 2602, (result_reg), (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2611, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2514, (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, 2622, (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, 2636, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2643, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2523, (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, 2653, (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, 2667, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2674, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 2531, (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, 2684, (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, 2698, (result_reg), Z_LVAL_P(Z_ZV(op2_addr))); - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 2706, (result_reg), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 1760, (Z_REG(op2_addr)), (result_reg)); - } else { - ZEND_UNREACHABLE(); - } - break; - default: - ZEND_UNREACHABLE(); - } -#line 5347 "/home/jakub/prog/php/83/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, 1782, (result_reg), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (result_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } -#line 5352 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); -#line 5357 "/home/jakub/prog/php/83/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, 276); -#line 5366 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|6: - dasm_put(Dst, 3411); -#line 5368 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(real_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(real_addr)), Z_OFFSET(real_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(real_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5372 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5374 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5383 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5392 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(real_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(real_addr)), Z_OFFSET(real_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(real_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5395 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5397 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5408 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 5413 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(bitwise_or_function)); - } else { - if (IS_SIGNED_32BIT(bitwise_or_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)bitwise_or_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)bitwise_or_function)), (unsigned int)((((ptrdiff_t)bitwise_or_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 5415 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(bitwise_and_function)); - } else { - if (IS_SIGNED_32BIT(bitwise_and_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)bitwise_and_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)bitwise_and_function)), (unsigned int)((((ptrdiff_t)bitwise_and_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 5417 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(bitwise_xor_function)); - } else { - if (IS_SIGNED_32BIT(bitwise_xor_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)bitwise_xor_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)bitwise_xor_function)), (unsigned int)((((ptrdiff_t)bitwise_xor_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 5419 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(shift_left_function)); - } else { - if (IS_SIGNED_32BIT(shift_left_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)shift_left_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)shift_left_function)), (unsigned int)((((ptrdiff_t)shift_left_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 5421 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(shift_right_function)); - } else { - if (IS_SIGNED_32BIT(shift_right_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)shift_right_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)shift_right_function)), (unsigned int)((((ptrdiff_t)shift_right_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 5423 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(mod_function)); - } else { - if (IS_SIGNED_32BIT(mod_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)mod_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)mod_function)), (unsigned int)((((ptrdiff_t)mod_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 5425 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 5436 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 5437 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 5440 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne ->exception_handler_free_op2 - dasm_put(Dst, 3438, (executor_globals_offset+offsetof(zend_executor_globals, exception))); -#line 5441 "/home/jakub/prog/php/83/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, 3400); -#line 5457 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - //|5: - dasm_put(Dst, 509); -#line 5460 "/home/jakub/prog/php/83/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, - uint8_t op1_type, - znode_op op1, - zend_jit_addr op1_addr, - uint32_t op1_info, - uint8_t 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, 3373, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING); -#line 5498 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_STRING); -#line 5501 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5505 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5507 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fast_assign_concat_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fast_assign_concat_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fast_assign_concat_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_fast_assign_concat_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fast_assign_concat_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 5508 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5513 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5515 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5517 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fast_concat_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fast_concat_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fast_concat_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_fast_concat_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fast_concat_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 5523 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fast_concat_tmp_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fast_concat_tmp_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fast_concat_tmp_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_fast_concat_tmp_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fast_concat_tmp_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 5525 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 5533 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|5: - dasm_put(Dst, 509); -#line 5534 "/home/jakub/prog/php/83/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, 276); -#line 5539 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|6: - dasm_put(Dst, 3411); -#line 5540 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5545 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5547 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5549 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5551 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5555 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 5560 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL concat_function, r0 - if (MAY_USE_32BIT_ADDR(concat_function)) { - dasm_put(Dst, 53, (ptrdiff_t)(concat_function)); - } else { - if (IS_SIGNED_32BIT(concat_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)concat_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)concat_function)), (unsigned int)((((ptrdiff_t)concat_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 5561 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 5568 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 5569 "/home/jakub/prog/php/83/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, 3448); -#line 5580 "/home/jakub/prog/php/83/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, 3360, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 5624 "/home/jakub/prog/php/83/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, 1790, offsetof(zend_array, u.flags), HASH_FLAG_PACKED, (ptrdiff_t)(exit_addr)); -#line 5635 "/home/jakub/prog/php/83/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, 1799, offsetof(zend_array, u.flags), HASH_FLAG_PACKED, (ptrdiff_t)(exit_addr)); -#line 5638 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG2), (ZREG_FCARG2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (ZREG_FCARG2)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5643 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG2), (ZREG_FCARG2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (ZREG_FCARG2)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5659 "/home/jakub/prog/php/83/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, 3641, offsetof(zend_array, u.flags), HASH_FLAG_PACKED); -#line 5674 "/home/jakub/prog/php/83/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, 3651, offsetof(zend_array, nNumUsed)); -#line 5678 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (val == 0) { - //| test r0, r0 - dasm_put(Dst, 3655); -#line 5680 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (val > 0 && !op2_loaded) { - //| cmp r0, val - dasm_put(Dst, 3659, val); -#line 5682 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| cmp r0, FCARG2a - dasm_put(Dst, 3665); -#line 5684 "/home/jakub/prog/php/83/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, 3670, (ptrdiff_t)(not_found_exit_addr)); -#line 5695 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jbe >9 // NOT_FOUND - dasm_put(Dst, 3674); -#line 5697 "/home/jakub/prog/php/83/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, 3670, (ptrdiff_t)(exit_addr)); -#line 5700 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (type == BP_VAR_IS && not_found_exit_addr) { - //| jbe ¬_found_exit_addr - dasm_put(Dst, 3670, (ptrdiff_t)(not_found_exit_addr)); -#line 5702 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (type == BP_VAR_RW && not_found_exit_addr) { - //| jbe ¬_found_exit_addr - dasm_put(Dst, 3670, (ptrdiff_t)(not_found_exit_addr)); -#line 5704 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (type == BP_VAR_IS && found_exit_addr) { - //| jbe >7 // NOT_FOUND - dasm_put(Dst, 3679); -#line 5706 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jbe >2 // NOT_FOUND - dasm_put(Dst, 3684); -#line 5708 "/home/jakub/prog/php/83/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, 3689, offsetof(zend_array, arPacked)); -#line 5712 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (val != 0) { - //| add r0, val * sizeof(zval) - dasm_put(Dst, 3694, val * sizeof(zval)); -#line 5714 "/home/jakub/prog/php/83/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, 3699, offsetof(zend_array, arPacked)); -#line 5723 "/home/jakub/prog/php/83/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, 3406); -#line 5731 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|4: - dasm_put(Dst, 375); -#line 5733 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG2), (ZREG_FCARG2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (ZREG_FCARG2)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5736 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(_zend_hash_index_find)); - } else { - if (IS_SIGNED_32BIT(_zend_hash_index_find)) { - dasm_put(Dst, 56, ((ptrdiff_t)_zend_hash_index_find)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_zend_hash_index_find)), (unsigned int)((((ptrdiff_t)_zend_hash_index_find))>>32)); - } - dasm_put(Dst, 66); - } -#line 5739 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_hash_index_find)); - } else { - if (IS_SIGNED_32BIT(zend_hash_index_find)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_index_find)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_index_find)), (unsigned int)((((ptrdiff_t)zend_hash_index_find))>>32)); - } - dasm_put(Dst, 66); - } -#line 5741 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| test r0, r0 - dasm_put(Dst, 3655); -#line 5743 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (not_found_exit_addr) { - //| jz ¬_found_exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(not_found_exit_addr)); -#line 5745 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jz >9 // NOT_FOUND - dasm_put(Dst, 3712); -#line 5747 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (op2_info & MAY_BE_STRING) { - //| jmp >5 - dasm_put(Dst, 3406); -#line 5750 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (packed_loaded) { - if (op2_info & MAY_BE_STRING) { - //| jmp >5 - dasm_put(Dst, 3406); -#line 5754 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (not_found_exit_addr) { - //| jmp ¬_found_exit_addr - dasm_put(Dst, 146, (ptrdiff_t)(not_found_exit_addr)); -#line 5757 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >9 // NOT_FOUND - dasm_put(Dst, 3717); -#line 5759 "/home/jakub/prog/php/83/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, 3722, offsetof(zval, u1.v.type), IS_UNDEF); -#line 5767 "/home/jakub/prog/php/83/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, 3731, offsetof(zval, u1.v.type), IS_UNDEF, (ptrdiff_t)(exit_addr)); -#line 5771 "/home/jakub/prog/php/83/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, 3731, offsetof(zval, u1.v.type), IS_UNDEF, (ptrdiff_t)(not_found_exit_addr)); -#line 5774 "/home/jakub/prog/php/83/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, 3739, offsetof(zval, u1.v.type), IS_UNDEF); -#line 5776 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| IF_Z_TYPE r0, IS_UNDEF, >2 // NOT_FOUND - dasm_put(Dst, 3748, offsetof(zval, u1.v.type), IS_UNDEF); -#line 5778 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 5783 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (type == BP_VAR_IS && not_found_exit_addr) { - //| jmp ¬_found_exit_addr - dasm_put(Dst, 146, (ptrdiff_t)(not_found_exit_addr)); -#line 5785 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (type == BP_VAR_IS && found_exit_addr) { - //| jmp >7 // NOT_FOUND - dasm_put(Dst, 3757); -#line 5787 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >2 // NOT_FOUND - dasm_put(Dst, 3762); -#line 5789 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - if (!packed_loaded || (op1_info & MAY_BE_ARRAY_NUMERIC_HASH)) { - //|4: - dasm_put(Dst, 375); -#line 5793 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG2), (ZREG_FCARG2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (ZREG_FCARG2)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5796 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(_zend_hash_index_find)); - } else { - if (IS_SIGNED_32BIT(_zend_hash_index_find)) { - dasm_put(Dst, 56, ((ptrdiff_t)_zend_hash_index_find)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_zend_hash_index_find)), (unsigned int)((((ptrdiff_t)_zend_hash_index_find))>>32)); - } - dasm_put(Dst, 66); - } -#line 5799 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_hash_index_find)); - } else { - if (IS_SIGNED_32BIT(zend_hash_index_find)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_index_find)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_index_find)), (unsigned int)((((ptrdiff_t)zend_hash_index_find))>>32)); - } - dasm_put(Dst, 66); - } -#line 5801 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| test r0, r0 - dasm_put(Dst, 3655); -#line 5803 "/home/jakub/prog/php/83/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, 1795, (ptrdiff_t)(exit_addr)); -#line 5805 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (type == BP_VAR_IS && not_found_exit_addr) { - //| jz ¬_found_exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(not_found_exit_addr)); -#line 5807 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (type == BP_VAR_IS && found_exit_addr) { - //| jz >7 // NOT_FOUND - dasm_put(Dst, 3743); -#line 5809 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jz >2 // NOT_FOUND - dasm_put(Dst, 2050); -#line 5811 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - //|.cold_code - dasm_put(Dst, 276); -#line 5814 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 5815 "/home/jakub/prog/php/83/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, 3767); - } 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 3771); - } -#line 5821 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >9 - dasm_put(Dst, 3717); -#line 5822 "/home/jakub/prog/php/83/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 5829 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >9 - dasm_put(Dst, 3775, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); -#line 5830 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - default: - ZEND_UNREACHABLE(); - } - //|.code - dasm_put(Dst, 373); -#line 5836 "/home/jakub/prog/php/83/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, 3722, offsetof(zval, u1.v.type), IS_UNDEF); -#line 5840 "/home/jakub/prog/php/83/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, 276); -#line 5846 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|2: - //|4: - dasm_put(Dst, 3788); -#line 5849 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG2), (ZREG_FCARG2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (ZREG_FCARG2)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5852 "/home/jakub/prog/php/83/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, 53, (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, 56, ((ptrdiff_t)zend_jit_hash_index_lookup_rw_no_packed)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 5855 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_hash_index_lookup_rw)); - } else { - if (IS_SIGNED_32BIT(zend_jit_hash_index_lookup_rw)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_hash_index_lookup_rw)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_hash_index_lookup_rw)), (unsigned int)((((ptrdiff_t)zend_jit_hash_index_lookup_rw))>>32)); - } - dasm_put(Dst, 66); - } -#line 5857 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| test r0, r0 - dasm_put(Dst, 3655); -#line 5859 "/home/jakub/prog/php/83/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, 3793, (ptrdiff_t)(not_found_exit_addr)); -#line 5864 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jz ¬_found_exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(not_found_exit_addr)); -#line 5866 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| jz >9 - dasm_put(Dst, 3712); -#line 5869 "/home/jakub/prog/php/83/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, 3722, offsetof(zval, u1.v.type), IS_UNDEF); -#line 5875 "/home/jakub/prog/php/83/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, 3788); -#line 5879 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG2), (ZREG_FCARG2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (ZREG_FCARG2)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5882 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_hash_index_lookup)); - } else { - if (IS_SIGNED_32BIT(zend_hash_index_lookup)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_index_lookup)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_index_lookup)), (unsigned int)((((ptrdiff_t)zend_hash_index_lookup))>>32)); - } - dasm_put(Dst, 66); - } -#line 5884 "/home/jakub/prog/php/83/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, 3802); -#line 5892 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - if (op2_info & MAY_BE_STRING) { - //|3: - dasm_put(Dst, 333); -#line 5897 "/home/jakub/prog/php/83/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, 3360, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_STRING); -#line 5900 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG2), (ZREG_FCARG2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (ZREG_FCARG2)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 5903 "/home/jakub/prog/php/83/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, 3807, offsetof(zend_string, val), '9'); -#line 5910 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| EXT_CALL zend_jit_symtable_find, r0 - dasm_put(Dst, 70); - if (MAY_USE_32BIT_ADDR(zend_jit_symtable_find)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_symtable_find)); - } else { - if (IS_SIGNED_32BIT(zend_jit_symtable_find)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_symtable_find)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_symtable_find)), (unsigned int)((((ptrdiff_t)zend_jit_symtable_find))>>32)); - } - dasm_put(Dst, 66); - } -#line 5912 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >1 - //|.code - dasm_put(Dst, 3817); -#line 5914 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL zend_hash_find, r0 - if (MAY_USE_32BIT_ADDR(zend_hash_find)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_hash_find)); - } else { - if (IS_SIGNED_32BIT(zend_hash_find)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_find)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_find)), (unsigned int)((((ptrdiff_t)zend_hash_find))>>32)); - } - dasm_put(Dst, 66); - } -#line 5915 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 5916 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_hash_find_known_hash)); - } else { - if (IS_SIGNED_32BIT(zend_hash_find_known_hash)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_find_known_hash)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_find_known_hash)), (unsigned int)((((ptrdiff_t)zend_hash_find_known_hash))>>32)); - } - dasm_put(Dst, 66); - } -#line 5918 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| test r0, r0 - dasm_put(Dst, 3655); -#line 5920 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (not_found_exit_addr) { - //| jz ¬_found_exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(not_found_exit_addr)); -#line 5922 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jz >9 // NOT_FOUND - dasm_put(Dst, 3712); -#line 5924 "/home/jakub/prog/php/83/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, 3807, offsetof(zend_string, val), '9'); -#line 5933 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| EXT_CALL zend_jit_symtable_find, r0 - dasm_put(Dst, 70); - if (MAY_USE_32BIT_ADDR(zend_jit_symtable_find)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_symtable_find)); - } else { - if (IS_SIGNED_32BIT(zend_jit_symtable_find)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_symtable_find)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_symtable_find)), (unsigned int)((((ptrdiff_t)zend_jit_symtable_find))>>32)); - } - dasm_put(Dst, 66); - } -#line 5935 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >1 - //|.code - dasm_put(Dst, 3817); -#line 5937 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL zend_hash_find, r0 - if (MAY_USE_32BIT_ADDR(zend_hash_find)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_hash_find)); - } else { - if (IS_SIGNED_32BIT(zend_hash_find)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_find)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_find)), (unsigned int)((((ptrdiff_t)zend_hash_find))>>32)); - } - dasm_put(Dst, 66); - } -#line 5938 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 5939 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_hash_find_known_hash)); - } else { - if (IS_SIGNED_32BIT(zend_hash_find_known_hash)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_find_known_hash)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_find_known_hash)), (unsigned int)((((ptrdiff_t)zend_hash_find_known_hash))>>32)); - } - dasm_put(Dst, 66); - } -#line 5941 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| test r0, r0 - dasm_put(Dst, 3655); -#line 5943 "/home/jakub/prog/php/83/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, 1795, (ptrdiff_t)(exit_addr)); -#line 5945 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (type == BP_VAR_IS && not_found_exit_addr) { - //| jz ¬_found_exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(not_found_exit_addr)); -#line 5947 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (type == BP_VAR_IS && found_exit_addr) { - //| jz >7 // NOT_FOUND - dasm_put(Dst, 3743); -#line 5949 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jz >2 // NOT_FOUND - //|.cold_code - dasm_put(Dst, 3823); -#line 5952 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 5953 "/home/jakub/prog/php/83/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, 3829); - } 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 3833); - } -#line 5957 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >9 - dasm_put(Dst, 3717); -#line 5958 "/home/jakub/prog/php/83/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 5963 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >9 - dasm_put(Dst, 3775, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); -#line 5964 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - break; - default: - ZEND_UNREACHABLE(); - } - //|.code - dasm_put(Dst, 373); -#line 5969 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_symtable_lookup_rw)); - } else { - if (IS_SIGNED_32BIT(zend_jit_symtable_lookup_rw)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_symtable_lookup_rw)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_symtable_lookup_rw)), (unsigned int)((((ptrdiff_t)zend_jit_symtable_lookup_rw))>>32)); - } - dasm_put(Dst, 66); - } -#line 5974 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_hash_lookup_rw)); - } else { - if (IS_SIGNED_32BIT(zend_jit_hash_lookup_rw)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_hash_lookup_rw)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_hash_lookup_rw)), (unsigned int)((((ptrdiff_t)zend_jit_hash_lookup_rw))>>32)); - } - dasm_put(Dst, 66); - } -#line 5976 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| test r0, r0 - dasm_put(Dst, 3655); -#line 5978 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (not_found_exit_addr) { - //| jz ¬_found_exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(not_found_exit_addr)); -#line 5980 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jz >9 - dasm_put(Dst, 3712); -#line 5982 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_symtable_lookup_w)); - } else { - if (IS_SIGNED_32BIT(zend_jit_symtable_lookup_w)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_symtable_lookup_w)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_symtable_lookup_w)), (unsigned int)((((ptrdiff_t)zend_jit_symtable_lookup_w))>>32)); - } - dasm_put(Dst, 66); - } -#line 5987 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_hash_lookup)); - } else { - if (IS_SIGNED_32BIT(zend_hash_lookup)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_lookup)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_lookup)), (unsigned int)((((ptrdiff_t)zend_hash_lookup))>>32)); - } - dasm_put(Dst, 66); - } -#line 5989 "/home/jakub/prog/php/83/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, 509); -#line 5998 "/home/jakub/prog/php/83/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, 3837, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 6000 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| cmp byte [r0 + 8], IS_NULL - dasm_put(Dst, 3855, 8, IS_NULL); -#line 6002 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (not_found_exit_addr) { - //| jle ¬_found_exit_addr - dasm_put(Dst, 3860, (ptrdiff_t)(not_found_exit_addr)); -#line 6004 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (found_exit_addr) { - //| jg &found_exit_addr - dasm_put(Dst, 3864, (ptrdiff_t)(found_exit_addr)); -#line 6006 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jle >9 // NOT FOUND - dasm_put(Dst, 3868); -#line 6008 "/home/jakub/prog/php/83/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, 276); -#line 6014 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|3: - dasm_put(Dst, 333); -#line 6015 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 6018 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6020 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6024 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_dim_r_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_dim_r_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_dim_r_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_r_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_r_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 6029 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.if not(X64) - //| add r4, 12 - //|.endif - //| jmp >9 - dasm_put(Dst, 3717); -#line 6033 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_dim_isset_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_dim_isset_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_dim_isset_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_isset_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_isset_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 6036 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| test r0, r0 - dasm_put(Dst, 3655); -#line 6037 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (not_found_exit_addr) { - //| je ¬_found_exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(not_found_exit_addr)); -#line 6039 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (op2_info & (MAY_BE_LONG|MAY_BE_STRING)) { - //| jmp >8 - dasm_put(Dst, 3802); -#line 6041 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (found_exit_addr) { - //| jne &found_exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(found_exit_addr)); -#line 6044 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (op2_info & (MAY_BE_LONG|MAY_BE_STRING)) { - //| jmp >9 - dasm_put(Dst, 3717); -#line 6046 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| jne >8 - //| jmp >9 - dasm_put(Dst, 3873); -#line 6050 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6056 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_dim_is_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_dim_is_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_dim_is_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_is_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_is_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 6061 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.if not(X64) - //| add r4, 12 - //|.endif - //| jmp >9 - dasm_put(Dst, 3717); -#line 6065 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_dim_rw_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_dim_rw_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_dim_rw_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_rw_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_rw_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 6068 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| test r0, r0 - //| jne >8 - //| jmp >9 - dasm_put(Dst, 3882); -#line 6071 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_dim_w_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_dim_w_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_dim_w_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_fetch_dim_w_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_dim_w_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 6074 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| test r0, r0 - //| jne >8 - //| jmp >9 - dasm_put(Dst, 3882); -#line 6077 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - break; - default: - ZEND_UNREACHABLE(); - } - if (op2_info & (MAY_BE_LONG|MAY_BE_STRING)) { - //|.code - dasm_put(Dst, 373); -#line 6083 "/home/jakub/prog/php/83/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, - uint8_t 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, 2735, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } - } else if (!IS_SIGNED_32BIT(zv)) { - dasm_put(Dst, 1768, (tmp_reg), (unsigned int)(((uintptr_t)zv)), (unsigned int)((((uintptr_t)zv))>>32)); - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (dst_reg-ZREG_XMM0), (tmp_reg), 0); - } else { - dasm_put(Dst, 2028, (dst_reg-ZREG_XMM0), (tmp_reg), 0); - } - } else { - if (CAN_USE_AVX()) { - dasm_put(Dst, 1978, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); - } else { - dasm_put(Dst, 1988, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (dst_reg-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 2735, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { - dasm_put(Dst, 1768, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); - } else { - dasm_put(Dst, 1775, (ZREG_R0), Z_LVAL_P(zv)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (dst_reg-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1760, (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, 1768, (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, 1768, (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, 1782, (tmp_reg), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } - } - } else { - if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 1775, (Z_REG(var_addr)), Z_LVAL_P(zv)); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 3894, (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, 1684, (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< 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, 2735, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } - } else if (!IS_SIGNED_32BIT(zv)) { - dasm_put(Dst, 1768, (tmp_reg), (unsigned int)(((uintptr_t)zv)), (unsigned int)((((uintptr_t)zv))>>32)); - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (dst_reg-ZREG_XMM0), (tmp_reg), 0); - } else { - dasm_put(Dst, 2028, (dst_reg-ZREG_XMM0), (tmp_reg), 0); - } - } else { - if (CAN_USE_AVX()) { - dasm_put(Dst, 1978, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); - } else { - dasm_put(Dst, 1988, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 2735, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { - dasm_put(Dst, 1768, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); - } else { - dasm_put(Dst, 1775, (ZREG_R0), Z_LVAL_P(zv)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 2735, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { - dasm_put(Dst, 1768, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); - } else { - dasm_put(Dst, 1775, (ZREG_R0), Z_LVAL_P(zv)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 2735, (ZREG_XMM0-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (ZREG_XMM0-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { - dasm_put(Dst, 1768, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); - } else { - dasm_put(Dst, 1775, (ZREG_R0), Z_LVAL_P(zv)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1760, (Z_REG(var_addr)), (Z_REG(var_addr))); - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (Z_REG(var_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (Z_REG(var_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } - } else { - dasm_put(Dst, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 1782, (Z_REG(res_addr)), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1768, (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, 1782, (Z_REG(var_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (Z_REG(var_addr)), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } - } else if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1768, (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, 1782, (Z_REG(res_addr)), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (Z_REG(res_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } - } else { - dasm_put(Dst, 1768, (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, 1782, (tmp_reg), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (tmp_reg), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1775, (Z_REG(var_addr)), Z_LVAL_P(zv)); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 3894, (Z_REG(var_addr)), Z_OFFSET(var_addr), Z_LVAL_P(zv)); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (Z_REG(var_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(zv)); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 3894, (Z_REG(res_addr)), Z_OFFSET(res_addr), Z_LVAL_P(zv)); - } - if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 1782, (Z_REG(res_addr)), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (Z_REG(res_addr)), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } - } else { - if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 1775, (Z_REG(var_addr)), Z_LVAL_P(zv)); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 3894, (Z_REG(var_addr)), Z_OFFSET(var_addr), Z_LVAL_P(zv)); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1775, (Z_REG(res_addr)), Z_LVAL_P(zv)); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 3894, (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, 1684, (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<>32), (tmp_reg), 0); - } else { - dasm_put(Dst, 3918, Z_LVAL_P(zv)); - } -#line 6123 "/home/jakub/prog/php/83/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, 3924, (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, 3939, Z_LVAL_P(zv)); - } -#line 6125 "/home/jakub/prog/php/83/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, 2252, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_UNDEF); -#line 6131 "/home/jakub/prog/php/83/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 6133 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 3945, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_UNDEF); -#line 6134 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 6135 "/home/jakub/prog/php/83/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, 3959); -#line 6139 "/home/jakub/prog/php/83/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, 1684, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), IS_NULL); -#line 6141 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); -#line 6143 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 3964, (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 6146 "/home/jakub/prog/php/83/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, 2338, Z_OFFSET(val_addr)); - if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 6150 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (check_exception) { - //| test r0, r0 - //| jz ->exception_handler_undef - dasm_put(Dst, 3978); -#line 6153 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (save_r1) { - //| mov FCARG1a, aword T1 // restore - dasm_put(Dst, 3986); -#line 6156 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jmp >3 - dasm_put(Dst, 3991); -#line 6158 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (in_cold) { - //|2: - dasm_put(Dst, 2065); -#line 6160 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //|.code - dasm_put(Dst, 373); -#line 6162 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(val_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6169 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| ZVAL_DEREF r2, val_info - if (val_info & MAY_BE_REF) { - dasm_put(Dst, 3996, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 6171 "/home/jakub/prog/php/83/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, 336, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); -#line 6178 "/home/jakub/prog/php/83/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 6180 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 3945, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); -#line 6181 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 6182 "/home/jakub/prog/php/83/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 6185 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GC_DELREF r2 - //| // ZVAL_COPY_VALUE(return_value, &ref->value); - dasm_put(Dst, 4014, (Z_REG(val_addr)), Z_OFFSET(val_addr)); -#line 6187 "/home/jakub/prog/php/83/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, 1782, (Z_REG(ref_addr)), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(var_addr)), (Z_REG(var_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(var_addr)), Z_LVAL_P(Z_ZV(ref_addr))); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (tmp_reg), (tmp_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (tmp_reg), Z_LVAL_P(Z_ZV(ref_addr))); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(ref_addr)), (tmp_reg)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 1782, (tmp_reg), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(ref_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(ref_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(ref_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(var_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(ref_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (tmp_reg), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (tmp_reg), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(val_info); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (type_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info)); - } -#line 6190 "/home/jakub/prog/php/83/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, 1782, (Z_REG(ref_addr)), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1782, (Z_REG(ref_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(var_addr)), (Z_REG(var_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(var_addr)), Z_LVAL_P(Z_ZV(ref_addr))); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1782, (Z_REG(var_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(ref_addr))); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(ref_addr)), (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 1782, (Z_REG(res_addr)), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (tmp_reg), (tmp_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (tmp_reg), Z_LVAL_P(Z_ZV(ref_addr))); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(ref_addr)), (tmp_reg)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 1782, (tmp_reg), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (tmp_reg), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(ref_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(ref_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(ref_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(var_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(ref_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(ref_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(ref_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(ref_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (tmp_reg), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (tmp_reg), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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)) { - uint8_t 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, 1684, (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, 1684, (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, 2205, (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, 2215, (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, 2215, (type_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 6192 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| je >2 - dasm_put(Dst, 2050); -#line 6194 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (tmp_reg == ZREG_R0) { - //| IF_NOT_REFCOUNTED ah, >3 - dasm_put(Dst, 4025); -#line 6196 "/home/jakub/prog/php/83/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, 4032, (tmp_reg), (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)); -#line 6198 "/home/jakub/prog/php/83/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, 1674, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); -#line 6200 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - - if (!res_addr) { - //| GC_ADDREF Ra(tmp_reg) - dasm_put(Dst, 3909, (tmp_reg), 0); -#line 6203 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| add dword [Ra(tmp_reg)], 2 - dasm_put(Dst, 3930, (tmp_reg), 0); -#line 6205 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jmp >3 - //|2: - dasm_put(Dst, 4044); -#line 6208 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (res_addr) { - if (tmp_reg == ZREG_R0) { - //| IF_NOT_REFCOUNTED ah, >2 - dasm_put(Dst, 4051); -#line 6211 "/home/jakub/prog/php/83/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, 4058, (tmp_reg), (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)); -#line 6213 "/home/jakub/prog/php/83/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 6215 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GC_ADDREF Ra(tmp_reg) - //|2: - dasm_put(Dst, 4070, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr), (tmp_reg), 0); -#line 6217 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (save_r1) { - //| mov aword T1, FCARG1a // save - dasm_put(Dst, 3959); -#line 6220 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| EFREE_REFERENCE r2 - dasm_put(Dst, 4090); - #if ZEND_DEBUG - dasm_put(Dst, 4094); - if (MAY_USE_32BIT_ADDR(_efree)) { - dasm_put(Dst, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - #else - #ifdef HAVE_BUILTIN_CONSTANT_P - if (MAY_USE_32BIT_ADDR(_efree_32)) { - dasm_put(Dst, 53, (ptrdiff_t)(_efree_32)); - } else { - if (IS_SIGNED_32BIT(_efree_32)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree_32)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree_32)), (unsigned int)((((ptrdiff_t)_efree_32))>>32)); - } - dasm_put(Dst, 66); - } - #else - if (MAY_USE_32BIT_ADDR(_efree)) { - dasm_put(Dst, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - #endif - #endif -#line 6222 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (save_r1) { - //| mov FCARG1a, aword T1 // restore - dasm_put(Dst, 3986); -#line 6224 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jmp >3 - dasm_put(Dst, 3991); -#line 6226 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (in_cold) { - //|1: - dasm_put(Dst, 70); -#line 6228 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //|.code - dasm_put(Dst, 373); -#line 6230 "/home/jakub/prog/php/83/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, 1782, (Z_REG(val_addr)), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(var_addr)), (Z_REG(var_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(var_addr)), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (tmp_reg), (tmp_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (tmp_reg), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(val_addr)), (tmp_reg)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 1782, (tmp_reg), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(var_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (tmp_reg), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (tmp_reg), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(val_info); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info)); - } -#line 6236 "/home/jakub/prog/php/83/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, 1782, (Z_REG(val_addr)), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1782, (Z_REG(val_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(var_addr)), (Z_REG(var_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(var_addr)), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1782, (Z_REG(var_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(val_addr)), (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 1782, (Z_REG(res_addr)), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (tmp_reg), (tmp_reg)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (tmp_reg), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(val_addr)), (tmp_reg)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 1782, (tmp_reg), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (tmp_reg), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(var_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (tmp_reg), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (tmp_reg), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (tmp_reg), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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)) { - uint8_t 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, 1684, (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, 1684, (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, 2205, (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, 2215, (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, 2215, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 6238 "/home/jakub/prog/php/83/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, 4107); - } - dasm_put(Dst, 4115, (tmp_reg), 0); - } -#line 6243 "/home/jakub/prog/php/83/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, 4107); - } - dasm_put(Dst, 4126, (tmp_reg), 0); - } -#line 6245 "/home/jakub/prog/php/83/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, 4107); - } - dasm_put(Dst, 4115, (tmp_reg), 0); - } -#line 6249 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - //|3: - dasm_put(Dst, 333); -#line 6252 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - return 1; -} - -static int zend_jit_assign_to_typed_ref(dasm_State **Dst, - const zend_op *opline, - uint8_t 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, 4137, offsetof(zend_reference, sources.ptr)); -#line 6267 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 6268 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(val_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6270 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 6273 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (!res_addr) { - 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, 53, (ptrdiff_t)(zend_jit_assign_const_to_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_const_to_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_const_to_typed_ref)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 6277 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_assign_tmp_to_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_tmp_to_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_tmp_to_typed_ref)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 6279 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_assign_var_to_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_var_to_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_var_to_typed_ref)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 6281 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_assign_cv_to_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_cv_to_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_cv_to_typed_ref)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 6283 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - 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, 3414, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6289 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.else - //| sub r4, 12 - //| PUSH_ZVAL_ADDR res_addr, r0 - //|.endif - if (val_type == IS_CONST) { - //| EXT_CALL zend_jit_assign_const_to_typed_ref2, r0 - if (MAY_USE_32BIT_ADDR(zend_jit_assign_const_to_typed_ref2)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_assign_const_to_typed_ref2)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_const_to_typed_ref2)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_const_to_typed_ref2)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_assign_const_to_typed_ref2)), (unsigned int)((((ptrdiff_t)zend_jit_assign_const_to_typed_ref2))>>32)); - } - dasm_put(Dst, 66); - } -#line 6295 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (val_type == IS_TMP_VAR) { - //| EXT_CALL zend_jit_assign_tmp_to_typed_ref2, r0 - if (MAY_USE_32BIT_ADDR(zend_jit_assign_tmp_to_typed_ref2)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_assign_tmp_to_typed_ref2)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_tmp_to_typed_ref2)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_tmp_to_typed_ref2)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_assign_tmp_to_typed_ref2)), (unsigned int)((((ptrdiff_t)zend_jit_assign_tmp_to_typed_ref2))>>32)); - } - dasm_put(Dst, 66); - } -#line 6297 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (val_type == IS_VAR) { - //| EXT_CALL zend_jit_assign_var_to_typed_ref2, r0 - if (MAY_USE_32BIT_ADDR(zend_jit_assign_var_to_typed_ref2)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_assign_var_to_typed_ref2)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_var_to_typed_ref2)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_var_to_typed_ref2)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_assign_var_to_typed_ref2)), (unsigned int)((((ptrdiff_t)zend_jit_assign_var_to_typed_ref2))>>32)); - } - dasm_put(Dst, 66); - } -#line 6299 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (val_type == IS_CV) { - //| EXT_CALL zend_jit_assign_cv_to_typed_ref2, r0 - if (MAY_USE_32BIT_ADDR(zend_jit_assign_cv_to_typed_ref2)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_assign_cv_to_typed_ref2)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_cv_to_typed_ref2)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_cv_to_typed_ref2)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_assign_cv_to_typed_ref2)), (unsigned int)((((ptrdiff_t)zend_jit_assign_cv_to_typed_ref2))>>32)); - } - dasm_put(Dst, 66); - } -#line 6301 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - ZEND_UNREACHABLE(); - } - //|.if not(X64) - //| add r4, 12 - //|.endif - } - if (check_exception) { - //| // if (UNEXPECTED(EG(exception) != NULL)) { - //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 6311 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| je >8 // END OF zend_jit_assign_to_variable() - //| jmp ->exception_handler - dasm_put(Dst, 4148, (executor_globals_offset+offsetof(zend_executor_globals, exception))); -#line 6313 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >8 - dasm_put(Dst, 3802); -#line 6315 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.code - dasm_put(Dst, 373); -#line 6317 "/home/jakub/prog/php/83/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, - uint8_t 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, 4162, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_UNDEF, (ptrdiff_t)(exit_addr)); -#line 6343 "/home/jakub/prog/php/83/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 6345 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 3945, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), IS_UNDEF); -#line 6346 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 6347 "/home/jakub/prog/php/83/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, 3552, (Z_REG(var_addr))); -#line 6350 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 6352 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1d, Z_OFFSET(val_addr) - //| EXT_CALL zend_jit_undefined_op_helper, r0 - dasm_put(Dst, 2338, Z_OFFSET(val_addr)); - if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 6354 "/home/jakub/prog/php/83/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, 3574, (Z_REG(var_addr))); -#line 6356 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(var_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(var_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6359 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| LOAD_ADDR_ZTS FCARG2a, executor_globals, uninitialized_zval - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 4174, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 4180, tsrm_tls_index, tsrm_tls_offset); - } -#line 6361 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| call ->assign_const - //| jmp >9 - //|.code - dasm_put(Dst, 4197, (executor_globals_offset + offsetof(zend_executor_globals, uninitialized_zval))); -#line 6364 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(var_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(var_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6368 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(val_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6371 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 6374 "/home/jakub/prog/php/83/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, 4210); -#line 6377 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (val_type == IS_CONST) { - //| call ->assign_const - dasm_put(Dst, 4214); -#line 6379 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (val_type == IS_TMP_VAR) { - //| call ->assign_tmp - dasm_put(Dst, 4210); -#line 6381 "/home/jakub/prog/php/83/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, 4210); -#line 6384 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| call ->assign_var - dasm_put(Dst, 4218); -#line 6386 "/home/jakub/prog/php/83/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, 4222); -#line 6390 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| call ->assign_cv - dasm_put(Dst, 4226); -#line 6392 "/home/jakub/prog/php/83/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, 4230); -#line 6395 "/home/jakub/prog/php/83/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, - uint8_t 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, 1775, (ref_reg), ((ptrdiff_t)Z_ZV(var_use_addr))); - } else { - dasm_put(Dst, 1768, (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, 2496, (ref_reg), (Z_REG(var_use_addr)), Z_OFFSET(var_use_addr)); - } else { - dasm_put(Dst, 1782, (Z_REG(var_use_addr)), (ref_reg)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6431 "/home/jakub/prog/php/83/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, 4233, (ref_reg), offsetof(zval, u1.v.type), IS_REFERENCE, (ref_reg), 0); -#line 6437 "/home/jakub/prog/php/83/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, 4253, (ref_reg), offsetof(zend_reference, val)); -#line 6442 "/home/jakub/prog/php/83/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 6449 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 263, (Z_REG(var_use_addr)), Z_OFFSET(var_use_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); -#line 6450 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 6451 "/home/jakub/prog/php/83/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, 1674, (tmp_reg), (Z_REG(var_use_addr)), Z_OFFSET(var_use_addr)); -#line 6457 "/home/jakub/prog/php/83/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, 3552, (tmp_reg)); -#line 6484 "/home/jakub/prog/php/83/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, 3986); -#line 6490 "/home/jakub/prog/php/83/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, 4245, (Z_REG(var_use_addr)), Z_OFFSET(var_use_addr)); -#line 6493 "/home/jakub/prog/php/83/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, 299); -#line 6498 "/home/jakub/prog/php/83/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, 308); -#line 6500 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jnz >8 - dasm_put(Dst, 3726); -#line 6502 "/home/jakub/prog/php/83/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))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } while(0); -#line 6504 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 6507 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| je >8 - //| jmp ->exception_handler - dasm_put(Dst, 4148, (executor_globals_offset+offsetof(zend_executor_globals, exception))); -#line 6509 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >8 - dasm_put(Dst, 3802); -#line 6511 "/home/jakub/prog/php/83/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, 4263, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } -#line 6517 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (in_cold) { - //| jmp >8 - dasm_put(Dst, 3802); -#line 6519 "/home/jakub/prog/php/83/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, 4275); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 6524 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| je >8 - //| jmp ->exception_handler - dasm_put(Dst, 4148, (executor_globals_offset+offsetof(zend_executor_globals, exception))); -#line 6526 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (in_cold) { - //|.code - dasm_put(Dst, 373); -#line 6529 "/home/jakub/prog/php/83/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, 4279, (Z_REG(var_use_addr)), Z_OFFSET(var_use_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); -#line 6535 "/home/jakub/prog/php/83/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, 3552, (Z_REG(var_use_addr))); -#line 6539 "/home/jakub/prog/php/83/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 6541 "/home/jakub/prog/php/83/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, 4293, (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, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } -#line 6544 "/home/jakub/prog/php/83/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, 3574, (Z_REG(var_use_addr))); -#line 6546 "/home/jakub/prog/php/83/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 6549 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GC_DELREF Ra(tmp_reg) - dasm_put(Dst, 4313, (tmp_reg), (Z_REG(var_use_addr)), Z_OFFSET(var_use_addr), (tmp_reg), 0); -#line 6550 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|5: - dasm_put(Dst, 509); -#line 6552 "/home/jakub/prog/php/83/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, 4331); -#line 6560 "/home/jakub/prog/php/83/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, 4162, (Z_REG(op3_addr)), Z_OFFSET(op3_addr)+offsetof(zval, u1.v.type), IS_UNDEF, (ptrdiff_t)(exit_addr)); -#line 6585 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6591 "/home/jakub/prog/php/83/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, 4334, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val) + offsetof(zval, u1.v.type), IS_ARRAY, offsetof(zend_reference, val)); -#line 6597 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 2065); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 6599 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_prepare_assign_dim_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_prepare_assign_dim_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_prepare_assign_dim_ref)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_prepare_assign_dim_ref)), (unsigned int)((((ptrdiff_t)zend_jit_prepare_assign_dim_ref))>>32)); - } - dasm_put(Dst, 66); - } -#line 6600 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| test r0, r0 - //| mov FCARG1a, r0 - //| jne >1 - //| jmp ->exception_handler_undef - //|.code - dasm_put(Dst, 4363); -#line 6605 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 6606 "/home/jakub/prog/php/83/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, 4379, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_ARRAY); -#line 6612 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|3: - //| SEPARATE_ARRAY op1_addr, op1_info, 1 - dasm_put(Dst, 333); - 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, 1760, (ZREG_R0), (ZREG_R0)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R0), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R0)); - } - } else { - ZEND_UNREACHABLE(); - } - if (RC_MAY_BE_1(op1_info)) { - dasm_put(Dst, 4392); - } - 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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } - } - if (MAY_USE_32BIT_ADDR(zend_jit_zval_array_dup)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_zval_array_dup)); - } else { - if (IS_SIGNED_32BIT(zend_jit_zval_array_dup)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_zval_array_dup)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_zval_array_dup)), (unsigned int)((((ptrdiff_t)zend_jit_zval_array_dup))>>32)); - } - dasm_put(Dst, 66); - } - dasm_put(Dst, 4400); - } else { - if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { - if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { - dasm_put(Dst, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (RC_MAY_BE_1(op1_info)) { - dasm_put(Dst, 4406); - if (1) { - dasm_put(Dst, 4410); - dasm_put(Dst, 70); - } else { - dasm_put(Dst, 3684); - } - } - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4416, (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, 53, (ptrdiff_t)(zend_array_dup)); - } else { - if (IS_SIGNED_32BIT(zend_array_dup)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_dup)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_dup)), (unsigned int)((((ptrdiff_t)zend_array_dup))>>32)); - } - dasm_put(Dst, 66); - } - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4435, (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, 2938); - } - } - dasm_put(Dst, 2065); - } - } else { - if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { - if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { - dasm_put(Dst, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } - } -#line 6615 "/home/jakub/prog/php/83/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 6618 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jg >7 - dasm_put(Dst, 4447, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_NULL); -#line 6619 "/home/jakub/prog/php/83/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, 3552, (Z_REG(op1_addr))); -#line 6623 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(_zend_new_array_0)); - } else { - if (IS_SIGNED_32BIT(_zend_new_array_0)) { - dasm_put(Dst, 56, ((ptrdiff_t)_zend_new_array_0)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_zend_new_array_0)), (unsigned int)((((ptrdiff_t)_zend_new_array_0))>>32)); - } - dasm_put(Dst, 66); - } -#line 6625 "/home/jakub/prog/php/83/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, 3574, (Z_REG(op1_addr))); -#line 6627 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| SET_ZVAL_LVAL op1_addr, r0 - if (Z_MODE(op1_addr) == IS_REG) { - dasm_put(Dst, 2306, (Z_REG(op1_addr))); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } -#line 6629 "/home/jakub/prog/php/83/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 6630 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1a, r0 - dasm_put(Dst, 4435, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_ARRAY_EX); -#line 6631 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_ARRAY)) { - //|6: - dasm_put(Dst, 3411); -#line 6635 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 4174, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 4180, tsrm_tls_index, tsrm_tls_offset); - } -#line 6641 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL zend_hash_next_index_insert, r0 - dasm_put(Dst, 4460, (executor_globals_offset + offsetof(zend_executor_globals, uninitialized_zval))); - if (MAY_USE_32BIT_ADDR(zend_hash_next_index_insert)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_hash_next_index_insert)); - } else { - if (IS_SIGNED_32BIT(zend_hash_next_index_insert)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_next_index_insert)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_next_index_insert)), (unsigned int)((((ptrdiff_t)zend_hash_next_index_insert))>>32)); - } - dasm_put(Dst, 66); - } -#line 6642 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| // if (UNEXPECTED(!var_ptr)) { - //| test r0, r0 - //| jz >1 - //|.cold_code - dasm_put(Dst, 4465); -#line 6646 "/home/jakub/prog/php/83/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, 70); - if (opline == last_valid_opline) { - zend_jit_use_last_valid_opline(); - dasm_put(Dst, 4474); - } 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 4478); - } -#line 6649 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| //ZEND_VM_C_GOTO(assign_dim_op_ret_null); - //| jmp >9 - //|.code - dasm_put(Dst, 4204); -#line 6652 "/home/jakub/prog/php/83/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, 4331); -#line 6673 "/home/jakub/prog/php/83/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, 276); -#line 6691 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|7: - dasm_put(Dst, 4482); -#line 6692 "/home/jakub/prog/php/83/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 6698 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jg >2 - dasm_put(Dst, 4485, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_NULL); -#line 6699 "/home/jakub/prog/php/83/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, 3552, (Z_REG(op1_addr))); -#line 6703 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(_zend_new_array_0)); - } else { - if (IS_SIGNED_32BIT(_zend_new_array_0)) { - dasm_put(Dst, 56, ((ptrdiff_t)_zend_new_array_0)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_zend_new_array_0)), (unsigned int)((((ptrdiff_t)_zend_new_array_0))>>32)); - } - dasm_put(Dst, 66); - } -#line 6705 "/home/jakub/prog/php/83/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, 3574, (Z_REG(op1_addr))); -#line 6707 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| SET_ZVAL_LVAL op1_addr, r0 - if (Z_MODE(op1_addr) == IS_REG) { - dasm_put(Dst, 2306, (Z_REG(op1_addr))); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } -#line 6709 "/home/jakub/prog/php/83/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 6710 "/home/jakub/prog/php/83/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, 4498, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_ARRAY_EX); -#line 6714 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 6718 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6720 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (opline->op2_type == IS_UNUSED) { - //| xor FCARG2a, FCARG2a - dasm_put(Dst, 2390); -#line 6723 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)(Z_ZV(op2_addr) + 1))); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)(Z_ZV(op2_addr) + 1))), (unsigned int)((((ptrdiff_t)(Z_ZV(op2_addr) + 1)))>>32)); - } -#line 6726 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6728 "/home/jakub/prog/php/83/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, 4516); -#line 6738 "/home/jakub/prog/php/83/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, 4520, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 4525, (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, 4530, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 4538, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6741 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(op3_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(op3_addr)), Z_OFFSET(op3_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(op3_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6747 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_assign_dim_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_dim_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_dim_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_assign_dim_helper)), (unsigned int)((((ptrdiff_t)zend_jit_assign_dim_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 6751 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((val_info) & MAY_BE_GUARD) - && has_concrete_type((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 6763 "/home/jakub/prog/php/83/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, 3717); -#line 6768 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.code - dasm_put(Dst, 373); -#line 6770 "/home/jakub/prog/php/83/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, 4230); - 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 6782 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 6802 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6804 "/home/jakub/prog/php/83/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, 4334, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val) + offsetof(zval, u1.v.type), IS_ARRAY, offsetof(zend_reference, val)); -#line 6810 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - //| EXT_CALL zend_jit_prepare_assign_dim_ref, r0 - dasm_put(Dst, 2065); - if (MAY_USE_32BIT_ADDR(zend_jit_prepare_assign_dim_ref)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_prepare_assign_dim_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_prepare_assign_dim_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_prepare_assign_dim_ref)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_prepare_assign_dim_ref)), (unsigned int)((((ptrdiff_t)zend_jit_prepare_assign_dim_ref))>>32)); - } - dasm_put(Dst, 66); - } -#line 6812 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| test r0, r0 - //| mov FCARG1a, r0 - //| jne >1 - //| jmp ->exception_handler_undef - //|.code - dasm_put(Dst, 4363); -#line 6817 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 6818 "/home/jakub/prog/php/83/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, 4379, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_ARRAY); -#line 6824 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|3: - //| SEPARATE_ARRAY op1_addr, op1_info, 1 - dasm_put(Dst, 333); - 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, 1760, (ZREG_R0), (ZREG_R0)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R0), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R0)); - } - } else { - ZEND_UNREACHABLE(); - } - if (RC_MAY_BE_1(op1_info)) { - dasm_put(Dst, 4392); - } - 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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } - } - if (MAY_USE_32BIT_ADDR(zend_jit_zval_array_dup)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_zval_array_dup)); - } else { - if (IS_SIGNED_32BIT(zend_jit_zval_array_dup)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_zval_array_dup)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_zval_array_dup)), (unsigned int)((((ptrdiff_t)zend_jit_zval_array_dup))>>32)); - } - dasm_put(Dst, 66); - } - dasm_put(Dst, 4400); - } else { - if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { - if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { - dasm_put(Dst, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (RC_MAY_BE_1(op1_info)) { - dasm_put(Dst, 4406); - if (1) { - dasm_put(Dst, 4410); - dasm_put(Dst, 70); - } else { - dasm_put(Dst, 3684); - } - } - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4416, (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, 53, (ptrdiff_t)(zend_array_dup)); - } else { - if (IS_SIGNED_32BIT(zend_array_dup)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_dup)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_dup)), (unsigned int)((((ptrdiff_t)zend_array_dup))>>32)); - } - dasm_put(Dst, 66); - } - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4435, (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, 2938); - } - } - dasm_put(Dst, 2065); - } - } else { - if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { - if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { - dasm_put(Dst, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } - } -#line 6827 "/home/jakub/prog/php/83/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, 276); -#line 6831 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|7: - dasm_put(Dst, 4482); -#line 6832 "/home/jakub/prog/php/83/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 6835 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jg >7 - dasm_put(Dst, 4447, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_NULL); -#line 6836 "/home/jakub/prog/php/83/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, 3552, (Z_REG(op1_addr))); -#line 6839 "/home/jakub/prog/php/83/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, 336, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); -#line 6843 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| mov FCARG1a, opline->op1.var - //| EXT_CALL zend_jit_undefined_op_helper, r0 - dasm_put(Dst, 798, opline->op1.var); - if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 6846 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 6847 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(_zend_new_array_0)); - } else { - if (IS_SIGNED_32BIT(_zend_new_array_0)) { - dasm_put(Dst, 56, ((ptrdiff_t)_zend_new_array_0)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_zend_new_array_0)), (unsigned int)((((ptrdiff_t)_zend_new_array_0))>>32)); - } - dasm_put(Dst, 66); - } -#line 6850 "/home/jakub/prog/php/83/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, 3574, (Z_REG(op1_addr))); -#line 6852 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| SET_ZVAL_LVAL op1_addr, r0 - if (Z_MODE(op1_addr) == IS_REG) { - dasm_put(Dst, 2306, (Z_REG(op1_addr))); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } -#line 6854 "/home/jakub/prog/php/83/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 6855 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1a, r0 - dasm_put(Dst, 4435, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_ARRAY_EX); -#line 6856 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (op1_info & MAY_BE_ARRAY) { - //| jmp >1 - //|.code - dasm_put(Dst, 3817); -#line 6859 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 6860 "/home/jakub/prog/php/83/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, 3411); -#line 6867 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 4174, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 4180, tsrm_tls_index, tsrm_tls_offset); - } -#line 6872 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL zend_hash_next_index_insert, r0 - dasm_put(Dst, 4460, (executor_globals_offset + offsetof(zend_executor_globals, uninitialized_zval))); - if (MAY_USE_32BIT_ADDR(zend_hash_next_index_insert)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_hash_next_index_insert)); - } else { - if (IS_SIGNED_32BIT(zend_hash_next_index_insert)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_next_index_insert)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_next_index_insert)), (unsigned int)((((ptrdiff_t)zend_hash_next_index_insert))>>32)); - } - dasm_put(Dst, 66); - } -#line 6873 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| // if (UNEXPECTED(!var_ptr)) { - //| test r0, r0 - //| jz >1 - //|.cold_code - dasm_put(Dst, 4465); -#line 6877 "/home/jakub/prog/php/83/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, 70); - if (opline == last_valid_opline) { - zend_jit_use_last_valid_opline(); - dasm_put(Dst, 4474); - } 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 4478); - } -#line 6880 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| //ZEND_VM_C_GOTO(assign_dim_op_ret_null); - //| jmp >9 - //|.code - dasm_put(Dst, 4204); -#line 6883 "/home/jakub/prog/php/83/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, 4331); -#line 6909 "/home/jakub/prog/php/83/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, 4544, offsetof(zval, u1.v.type), dim_type, (ptrdiff_t)(not_found_exit_addr)); -#line 6911 "/home/jakub/prog/php/83/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, 4552, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, sources.ptr), offsetof(zend_reference, val)); -#line 6921 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - //| LOAD_ZVAL_ADDR FCARG2a, op3_addr - dasm_put(Dst, 2065); - if (Z_MODE(op3_addr) == IS_CONST_ZVAL) { - if (IS_SIGNED_32BIT(Z_ZV(op3_addr))) { - dasm_put(Dst, 751, ((ptrdiff_t)Z_ZV(op3_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op3_addr)), Z_OFFSET(op3_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op3_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6923 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.if X64 - //| LOAD_ADDR CARG3, binary_op - if (IS_SIGNED_32BIT(binary_op)) { - dasm_put(Dst, 3414, ((ptrdiff_t)binary_op)); - } else { - dasm_put(Dst, 3419, (unsigned int)(((ptrdiff_t)binary_op)), (unsigned int)((((ptrdiff_t)binary_op))>>32)); - } -#line 6925 "/home/jakub/prog/php/83/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, 53, (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, 56, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 6932 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_assign_op_to_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_op_to_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 6934 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.if not(X64) - //| add r4, 12 - //|.endif - //| jmp >9 - //|.code - dasm_put(Dst, 4204); -#line 6940 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 6941 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 6979 "/home/jakub/prog/php/83/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, 276); -#line 6986 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|7: - dasm_put(Dst, 4482); -#line 6987 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6991 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (opline->op2_type == IS_UNUSED) { - //| xor FCARG2a, FCARG2a - dasm_put(Dst, 2390); -#line 6994 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)(Z_ZV(op2_addr) + 1))); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)(Z_ZV(op2_addr) + 1))), (unsigned int)((((ptrdiff_t)(Z_ZV(op2_addr) + 1)))>>32)); - } -#line 6997 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 6999 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(op3_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(op3_addr)), Z_OFFSET(op3_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(op3_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 7003 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| LOAD_ADDR CARG4, binary_op - if (IS_SIGNED_32BIT(binary_op)) { - dasm_put(Dst, 4520, ((ptrdiff_t)binary_op)); - } else { - dasm_put(Dst, 4525, (unsigned int)(((ptrdiff_t)binary_op)), (unsigned int)((((ptrdiff_t)binary_op))>>32)); - } -#line 7004 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_assign_dim_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_dim_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_dim_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_assign_dim_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_assign_dim_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 7010 "/home/jakub/prog/php/83/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, 4230); - 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - 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))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 7016 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 7017 "/home/jakub/prog/php/83/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, 4204); -#line 7024 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|9: - dasm_put(Dst, 4230); -#line 7025 "/home/jakub/prog/php/83/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, 276); -#line 7029 "/home/jakub/prog/php/83/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, 4230); - 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - 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))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 7031 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 7032 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (may_throw) { - zend_jit_check_exception(Dst); - } - //| jmp >9 - //|.code - dasm_put(Dst, 4204); -#line 7037 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|9: - dasm_put(Dst, 4230); -#line 7038 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 7056 "/home/jakub/prog/php/83/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, 4578, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, sources.ptr), offsetof(zend_reference, val)); -#line 7062 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - //| LOAD_ZVAL_ADDR FCARG2a, op2_addr - dasm_put(Dst, 2065); - if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { - if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { - dasm_put(Dst, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 7064 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.if X64 - //| LOAD_ADDR CARG3, binary_op - if (IS_SIGNED_32BIT(binary_op)) { - dasm_put(Dst, 3414, ((ptrdiff_t)binary_op)); - } else { - dasm_put(Dst, 3419, (unsigned int)(((ptrdiff_t)binary_op)), (unsigned int)((((ptrdiff_t)binary_op))>>32)); - } -#line 7066 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 7071 "/home/jakub/prog/php/83/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, 53, (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, 56, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 7074 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_assign_op_to_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_op_to_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 7076 "/home/jakub/prog/php/83/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, 4204); -#line 7083 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 7084 "/home/jakub/prog/php/83/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, 4230); -#line 7113 "/home/jakub/prog/php/83/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, - uint8_t 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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), (result ? IS_TRUE : IS_FALSE)); -#line 7137 "/home/jakub/prog/php/83/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, 1614, target_label); -#line 7143 "/home/jakub/prog/php/83/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, 1614, target_label); -#line 7148 "/home/jakub/prog/php/83/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, 3590, (Z_REG(op1_addr)), (Z_REG(op1_addr))); -#line 7165 "/home/jakub/prog/php/83/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, 4604, (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, 4614, (Z_REG(op1_addr)), Z_LVAL_P(Z_ZV(op2_addr))); - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 4622, (Z_REG(op1_addr)), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 4632, (Z_REG(op2_addr)), (Z_REG(op1_addr))); - } else { - ZEND_UNREACHABLE(); - } -#line 7167 "/home/jakub/prog/php/83/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, 3590, (Z_REG(op2_addr)), (Z_REG(op2_addr))); -#line 7171 "/home/jakub/prog/php/83/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, 4604, (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, 4614, (Z_REG(op2_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 4622, (Z_REG(op2_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else if (Z_MODE(op1_addr) == IS_REG) { - dasm_put(Dst, 4632, (Z_REG(op1_addr)), (Z_REG(op2_addr))); - } else { - ZEND_UNREACHABLE(); - } -#line 7173 "/home/jakub/prog/php/83/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, 4640, (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, 4652, (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, 4604, (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, 4614, (Z_REG(op2_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 7177 "/home/jakub/prog/php/83/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, 4640, (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, 4652, (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, 4604, (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, 4614, (Z_REG(op1_addr)), Z_LVAL_P(Z_ZV(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 7180 "/home/jakub/prog/php/83/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, 1760, (ZREG_R0), (ZREG_R0)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R0), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R0)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 7182 "/home/jakub/prog/php/83/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, 3655); -#line 7184 "/home/jakub/prog/php/83/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, 4604, (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, 4614, (ZREG_R0), Z_LVAL_P(Z_ZV(op2_addr))); - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 4622, (ZREG_R0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else if (Z_MODE(op2_addr) == IS_REG) { - dasm_put(Dst, 4632, (Z_REG(op2_addr)), (ZREG_R0)); - } else { - ZEND_UNREACHABLE(); - } -#line 7186 "/home/jakub/prog/php/83/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, 4661); -#line 7199 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - break; - case ZEND_IS_NOT_EQUAL: - case ZEND_IS_NOT_IDENTICAL: - //| setne al - dasm_put(Dst, 4665); -#line 7203 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - break; - case ZEND_IS_SMALLER: - if (swap) { - //| setg al - dasm_put(Dst, 4669); -#line 7207 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| setl al - dasm_put(Dst, 4673); -#line 7209 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_SMALLER_OR_EQUAL: - if (swap) { - //| setge al - dasm_put(Dst, 4677); -#line 7214 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| setle al - dasm_put(Dst, 4681); -#line 7216 "/home/jakub/prog/php/83/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, 4685, 2); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 7224 "/home/jakub/prog/php/83/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, 1593, (ptrdiff_t)(exit_addr)); -#line 7234 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jne => target_label - dasm_put(Dst, 1908, target_label); -#line 7236 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_NOT_EQUAL: - if (exit_addr) { - //| je &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 7241 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| je => target_label - dasm_put(Dst, 4700, target_label); -#line 7243 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_NOT_IDENTICAL: - if (exit_addr) { - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 7248 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| je => target_label - dasm_put(Dst, 4700, target_label); -#line 7250 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_SMALLER: - if (swap) { - if (exit_addr) { - //| jle &exit_addr - dasm_put(Dst, 3860, (ptrdiff_t)(exit_addr)); -#line 7256 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jle => target_label - dasm_put(Dst, 4704, target_label); -#line 7258 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - if (exit_addr) { - //| jge &exit_addr - dasm_put(Dst, 4708, (ptrdiff_t)(exit_addr)); -#line 7262 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jge => target_label - dasm_put(Dst, 4712, target_label); -#line 7264 "/home/jakub/prog/php/83/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, 4716, (ptrdiff_t)(exit_addr)); -#line 7271 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jl => target_label - dasm_put(Dst, 4720, target_label); -#line 7273 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - if (exit_addr) { - //| jg &exit_addr - dasm_put(Dst, 3864, (ptrdiff_t)(exit_addr)); -#line 7277 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jg => target_label - dasm_put(Dst, 4724, target_label); -#line 7279 "/home/jakub/prog/php/83/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, 1795, (ptrdiff_t)(exit_addr)); -#line 7294 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| je => target_label - dasm_put(Dst, 4700, target_label); -#line 7296 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_NOT_EQUAL: - if (exit_addr) { - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 7301 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jne => target_label - dasm_put(Dst, 1908, target_label); -#line 7303 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_NOT_IDENTICAL: - if (exit_addr) { - //| je &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 7308 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jne => target_label - dasm_put(Dst, 1908, target_label); -#line 7310 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_SMALLER: - if (swap) { - if (exit_addr) { - //| jg &exit_addr - dasm_put(Dst, 3864, (ptrdiff_t)(exit_addr)); -#line 7316 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jg => target_label - dasm_put(Dst, 4724, target_label); -#line 7318 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - if (exit_addr) { - //| jl &exit_addr - dasm_put(Dst, 4716, (ptrdiff_t)(exit_addr)); -#line 7322 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jl => target_label - dasm_put(Dst, 4720, target_label); -#line 7324 "/home/jakub/prog/php/83/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, 4708, (ptrdiff_t)(exit_addr)); -#line 7331 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jge => target_label - dasm_put(Dst, 4712, target_label); -#line 7333 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - if (exit_addr) { - //| jle &exit_addr - dasm_put(Dst, 3860, (ptrdiff_t)(exit_addr)); -#line 7337 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jle => target_label - dasm_put(Dst, 4704, target_label); -#line 7339 "/home/jakub/prog/php/83/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, 4661); -#line 7355 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - break; - case ZEND_IS_NOT_EQUAL: - case ZEND_IS_NOT_IDENTICAL: - //| setne al - dasm_put(Dst, 4665); -#line 7359 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - break; - case ZEND_IS_SMALLER: - if (swap) { - //| setg al - dasm_put(Dst, 4669); -#line 7363 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| setl al - dasm_put(Dst, 4673); -#line 7365 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_SMALLER_OR_EQUAL: - if (swap) { - //| setge al - dasm_put(Dst, 4677); -#line 7370 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| setle al - dasm_put(Dst, 4681); -#line 7372 "/home/jakub/prog/php/83/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, 4728); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 7380 "/home/jakub/prog/php/83/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, uint8_t 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, 4735, (ptrdiff_t)(exit_addr), (ptrdiff_t)(exit_addr)); -#line 7397 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jne => target_label - //| jp => target_label - dasm_put(Dst, 4742, target_label, target_label); -#line 7400 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_NOT_EQUAL: - //| jp >1 - dasm_put(Dst, 4749); -#line 7404 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (exit_addr) { - //| je &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 7406 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| je => target_label - dasm_put(Dst, 4700, target_label); -#line 7408 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|1: - dasm_put(Dst, 70); -#line 7410 "/home/jakub/prog/php/83/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, 4735, (ptrdiff_t)(exit_addr), (ptrdiff_t)(exit_addr)); -#line 7415 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jp >1 - //| je => target_label - //|1: - dasm_put(Dst, 4754, target_label); -#line 7419 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_SMALLER: - if (swap) { - if (exit_addr) { - //| jbe &exit_addr - dasm_put(Dst, 3670, (ptrdiff_t)(exit_addr)); -#line 7425 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jbe => target_label - dasm_put(Dst, 4764, target_label); -#line 7427 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - if (exit_addr) { - //| jae &exit_addr - //| jp &exit_addr - dasm_put(Dst, 4768, (ptrdiff_t)(exit_addr), (ptrdiff_t)(exit_addr)); -#line 7432 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jae => target_label - //| jp => target_label - dasm_put(Dst, 4775, target_label, target_label); -#line 7435 "/home/jakub/prog/php/83/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, 4782, (ptrdiff_t)(exit_addr)); -#line 7442 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jb => target_label - dasm_put(Dst, 4786, target_label); -#line 7444 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - if (exit_addr) { - //| ja &exit_addr - //| jp &exit_addr - dasm_put(Dst, 4790, (ptrdiff_t)(exit_addr), (ptrdiff_t)(exit_addr)); -#line 7449 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| ja => target_label - //| jp => target_label - dasm_put(Dst, 4797, target_label, target_label); -#line 7452 "/home/jakub/prog/php/83/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, 4749); -#line 7465 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (exit_addr) { - //| je &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 7467 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| je => target_label - dasm_put(Dst, 4700, target_label); -#line 7469 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|1: - dasm_put(Dst, 70); -#line 7471 "/home/jakub/prog/php/83/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, 4735, (ptrdiff_t)(exit_addr), (ptrdiff_t)(exit_addr)); -#line 7476 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jne => target_label - //| jp => target_label - dasm_put(Dst, 4742, target_label, target_label); -#line 7479 "/home/jakub/prog/php/83/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, 4804, (ptrdiff_t)(exit_addr)); -#line 7486 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jne => target_label - //| jp => target_label - dasm_put(Dst, 4742, target_label, target_label); -#line 7489 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_SMALLER: - if (swap) { - if (exit_addr) { - //| ja &exit_addr - dasm_put(Dst, 4814, (ptrdiff_t)(exit_addr)); -#line 7495 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| ja => target_label - dasm_put(Dst, 4818, target_label); -#line 7497 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| jp >1 - dasm_put(Dst, 4749); -#line 7500 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (exit_addr) { - //| jb &exit_addr - dasm_put(Dst, 4782, (ptrdiff_t)(exit_addr)); -#line 7502 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jb => target_label - dasm_put(Dst, 4786, target_label); -#line 7504 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|1: - dasm_put(Dst, 70); -#line 7506 "/home/jakub/prog/php/83/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, 1756, (ptrdiff_t)(exit_addr)); -#line 7512 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jae => target_label - dasm_put(Dst, 4822, target_label); -#line 7514 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| jp >1 - dasm_put(Dst, 4749); -#line 7517 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (exit_addr) { - //| jbe &exit_addr - dasm_put(Dst, 3670, (ptrdiff_t)(exit_addr)); -#line 7519 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jbe => target_label - dasm_put(Dst, 4764, target_label); -#line 7521 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|1: - dasm_put(Dst, 70); -#line 7523 "/home/jakub/prog/php/83/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 7535 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne => target_label - //| jp => target_label - //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE - dasm_put(Dst, 4826, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 7538 "/home/jakub/prog/php/83/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, 4749); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 7543 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| je => target_label - //|1: - //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE - dasm_put(Dst, 4841, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 7546 "/home/jakub/prog/php/83/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 7550 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jbe => target_label - //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE - dasm_put(Dst, 4855, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 7552 "/home/jakub/prog/php/83/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 7554 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jae => target_label - //| jp => target_label - //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE - dasm_put(Dst, 4867, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 7557 "/home/jakub/prog/php/83/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 7562 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jb => target_label - //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE - dasm_put(Dst, 4882, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 7564 "/home/jakub/prog/php/83/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 7566 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| ja => target_label - //| jp => target_label - //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE - dasm_put(Dst, 4894, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 7569 "/home/jakub/prog/php/83/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, 4749); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 7582 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| je => target_label - //|1: - //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE - dasm_put(Dst, 4841, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 7585 "/home/jakub/prog/php/83/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 7589 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne => target_label - //| jp => target_label - //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE - dasm_put(Dst, 4826, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 7592 "/home/jakub/prog/php/83/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, 4909, 2); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 7599 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| ja => target_label - dasm_put(Dst, 4919, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), target_label); -#line 7600 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jp >1 - //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE - dasm_put(Dst, 4749); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 7603 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jb => target_label - //|1: - //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE - dasm_put(Dst, 4930, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 7606 "/home/jakub/prog/php/83/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, 4944, 2); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 7614 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jae => target_label - dasm_put(Dst, 4954, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), target_label); -#line 7615 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jp >1 - //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE - dasm_put(Dst, 4749); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 7618 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jbe => target_label - //|1: - //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE - dasm_put(Dst, 4965, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 7621 "/home/jakub/prog/php/83/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, 4979, IS_TRUE, IS_FALSE); -#line 7641 "/home/jakub/prog/php/83/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, 4979, IS_FALSE, IS_TRUE); -#line 7650 "/home/jakub/prog/php/83/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, 4996); -#line 7656 "/home/jakub/prog/php/83/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, 5006, IS_TRUE, IS_FALSE); -#line 7663 "/home/jakub/prog/php/83/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, 5023); -#line 7670 "/home/jakub/prog/php/83/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, 5033, IS_TRUE, IS_FALSE); -#line 7677 "/home/jakub/prog/php/83/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, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 7683 "/home/jakub/prog/php/83/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, uint8_t 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, 2735, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R0), Z_LVAL_P(Z_ZV(op1_addr))); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 2799, (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, 2825, (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, 2756, (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, 2780, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 7693 "/home/jakub/prog/php/83/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, 5050, (tmp_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 5060, (tmp_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 5070, (tmp_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 5078, (tmp_reg-ZREG_XMM0)); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 5086, (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 5098, (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, 5110, (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 5120, (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 7694 "/home/jakub/prog/php/83/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, uint8_t 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, 2735, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R0), Z_LVAL_P(Z_ZV(op2_addr))); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 2799, (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, 2825, (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, 2756, (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, 2780, (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 7703 "/home/jakub/prog/php/83/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, 5050, (tmp_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 5060, (tmp_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 5070, (tmp_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 5078, (tmp_reg-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 5086, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 5098, (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, 5110, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 5120, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 7704 "/home/jakub/prog/php/83/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, uint8_t 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, 5050, (Z_REG(op1_addr)-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 5060, (Z_REG(op1_addr)-ZREG_XMM0), Z_ZV(op2_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 5070, (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 5078, (Z_REG(op1_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 5086, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 5098, (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, 5110, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 5120, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 7714 "/home/jakub/prog/php/83/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, 5050, (Z_REG(op2_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 5060, (Z_REG(op2_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 5070, (Z_REG(op2_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 5078, (Z_REG(op2_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 5086, (Z_REG(op2_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 5098, (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, 5110, (Z_REG(op2_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 5120, (Z_REG(op2_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 7716 "/home/jakub/prog/php/83/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, 1978, (tmp_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (tmp_reg-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (tmp_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (tmp_reg-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (tmp_reg-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } - } else { - ZEND_UNREACHABLE(); - } - } -#line 7721 "/home/jakub/prog/php/83/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, 5050, (tmp_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } else { - dasm_put(Dst, 5060, (tmp_reg-ZREG_XMM0), Z_ZV(op2_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op2_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op2_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 5070, (tmp_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 5078, (tmp_reg-ZREG_XMM0)); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 5086, (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 5098, (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, 5110, (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 5120, (tmp_reg-ZREG_XMM0), (Z_REG(op2_addr)-ZREG_XMM0)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 7722 "/home/jakub/prog/php/83/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, uint8_t smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) -{ - //| test, eax, eax - dasm_put(Dst, 3656); -#line 7730 "/home/jakub/prog/php/83/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, 4661); -#line 7737 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - break; - case ZEND_IS_NOT_EQUAL: - //| setne al - dasm_put(Dst, 4665); -#line 7740 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - break; - case ZEND_IS_SMALLER: - //| setl al - dasm_put(Dst, 4673); -#line 7743 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - break; - case ZEND_IS_SMALLER_OR_EQUAL: - //| setle al - dasm_put(Dst, 4681); -#line 7746 "/home/jakub/prog/php/83/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, 4685, 2); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 7753 "/home/jakub/prog/php/83/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, 1593, (ptrdiff_t)(exit_addr)); -#line 7761 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jne => target_label - dasm_put(Dst, 1908, target_label); -#line 7763 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_NOT_EQUAL: - if (exit_addr) { - //| je &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 7768 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| je => target_label - dasm_put(Dst, 4700, target_label); -#line 7770 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_SMALLER: - if (exit_addr) { - //| jge &exit_addr - dasm_put(Dst, 4708, (ptrdiff_t)(exit_addr)); -#line 7775 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jge => target_label - dasm_put(Dst, 4712, target_label); -#line 7777 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_SMALLER_OR_EQUAL: - if (exit_addr) { - //| jg &exit_addr - dasm_put(Dst, 3864, (ptrdiff_t)(exit_addr)); -#line 7782 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jg => target_label - dasm_put(Dst, 4724, target_label); -#line 7784 "/home/jakub/prog/php/83/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, 1795, (ptrdiff_t)(exit_addr)); -#line 7796 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| je => target_label - dasm_put(Dst, 4700, target_label); -#line 7798 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_NOT_EQUAL: - if (exit_addr) { - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 7803 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jne => target_label - dasm_put(Dst, 1908, target_label); -#line 7805 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_SMALLER: - if (exit_addr) { - //| jl &exit_addr - dasm_put(Dst, 4716, (ptrdiff_t)(exit_addr)); -#line 7810 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jl => target_label - dasm_put(Dst, 4720, target_label); -#line 7812 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - break; - case ZEND_IS_SMALLER_OR_EQUAL: - if (exit_addr) { - //| jle &exit_addr - dasm_put(Dst, 3860, (ptrdiff_t)(exit_addr)); -#line 7817 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jle => target_label - dasm_put(Dst, 4704, target_label); -#line 7819 "/home/jakub/prog/php/83/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, 4661); -#line 7832 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - break; - case ZEND_IS_NOT_EQUAL: - //| setne al - dasm_put(Dst, 4665); -#line 7835 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - break; - case ZEND_IS_SMALLER: - //| setl al - dasm_put(Dst, 4673); -#line 7838 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - break; - case ZEND_IS_SMALLER_OR_EQUAL: - //| setle al - dasm_put(Dst, 4681); -#line 7841 "/home/jakub/prog/php/83/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, 4728); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 7848 "/home/jakub/prog/php/83/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, - uint8_t 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, 5130, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 7882 "/home/jakub/prog/php/83/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, 5143, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 7884 "/home/jakub/prog/php/83/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 7889 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 5156, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 7890 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|3: - dasm_put(Dst, 333); -#line 7891 "/home/jakub/prog/php/83/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, 5143, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 7893 "/home/jakub/prog/php/83/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, 5170); -#line 7899 "/home/jakub/prog/php/83/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, 5143, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 7901 "/home/jakub/prog/php/83/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, 276); -#line 7908 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|4: - dasm_put(Dst, 375); -#line 7909 "/home/jakub/prog/php/83/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, 5143, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 7911 "/home/jakub/prog/php/83/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, 5176, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 7916 "/home/jakub/prog/php/83/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, 5143, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 7918 "/home/jakub/prog/php/83/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, 5189); -#line 7924 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (!same_ops) { - //|5: - dasm_put(Dst, 509); -#line 7927 "/home/jakub/prog/php/83/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, 5143, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 7929 "/home/jakub/prog/php/83/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, 5189); -#line 7934 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.code - dasm_put(Dst, 373); -#line 7936 "/home/jakub/prog/php/83/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, 5143, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 7942 "/home/jakub/prog/php/83/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, 3360, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 7947 "/home/jakub/prog/php/83/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, 5143, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 7949 "/home/jakub/prog/php/83/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, 276); -#line 7958 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|3: - dasm_put(Dst, 333); -#line 7960 "/home/jakub/prog/php/83/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, 5143, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 7962 "/home/jakub/prog/php/83/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, 5170); -#line 7969 "/home/jakub/prog/php/83/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, 5143, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 7976 "/home/jakub/prog/php/83/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, 3360, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 7981 "/home/jakub/prog/php/83/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, 5143, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_DOUBLE); -#line 7983 "/home/jakub/prog/php/83/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, 276); -#line 7992 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|3: - dasm_put(Dst, 333); -#line 7994 "/home/jakub/prog/php/83/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, 5143, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 7996 "/home/jakub/prog/php/83/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, 5170); -#line 8003 "/home/jakub/prog/php/83/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, 276); -#line 8012 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|9: - dasm_put(Dst, 4230); -#line 8013 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 8015 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8030 "/home/jakub/prog/php/83/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, 5194, offsetof(zval, u1.v.type), IS_UNDEF, opline->op1.var); - if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 8034 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| LOAD_ADDR_ZTS FCARG1a, executor_globals, uninitialized_zval - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 5207, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 5213, tsrm_tls_index, tsrm_tls_offset); - } -#line 8035 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 5230, (executor_globals_offset + offsetof(zend_executor_globals, uninitialized_zval))); -#line 8036 "/home/jakub/prog/php/83/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 8039 "/home/jakub/prog/php/83/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, 5237, (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, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 8042 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1a, T1 // restore - //| LOAD_ADDR_ZTS FCARG2a, executor_globals, uninitialized_zval - dasm_put(Dst, 5258); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 4174, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 4180, tsrm_tls_index, tsrm_tls_offset); - } -#line 8044 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >2 - //|1: - //| LOAD_ZVAL_ADDR FCARG2a, op2_addr - dasm_put(Dst, 5264, (executor_globals_offset + offsetof(zend_executor_globals, uninitialized_zval))); - if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { - if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { - dasm_put(Dst, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8047 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 8048 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8050 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| EXT_CALL zend_compare, r0 - if (MAY_USE_32BIT_ADDR(zend_compare)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_compare)); - } else { - if (IS_SIGNED_32BIT(zend_compare)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_compare)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_compare)), (unsigned int)((((ptrdiff_t)zend_compare))>>32)); - } - dasm_put(Dst, 66); - } -#line 8052 "/home/jakub/prog/php/83/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, 3548); -#line 8058 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 8060 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 8062 "/home/jakub/prog/php/83/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, 3570); -#line 8066 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (may_throw) { -#if ZTS - //| mov dword T1, eax // save - dasm_put(Dst, 3548); -#line 8069 "/home/jakub/prog/php/83/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, 3548); -#line 8072 "/home/jakub/prog/php/83/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, 3570); -#line 8077 "/home/jakub/prog/php/83/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, 3570); -#line 8080 "/home/jakub/prog/php/83/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, 5170); -#line 8089 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - //|6: - dasm_put(Dst, 3411); -#line 8093 "/home/jakub/prog/php/83/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, - uint8_t 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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8154 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| IF_Z_TYPE FCARG1a, IS_UNDEF, >1 - //|.cold_code - dasm_put(Dst, 5275, offsetof(zval, u1.v.type), IS_UNDEF); -#line 8156 "/home/jakub/prog/php/83/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, 70); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 8159 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1d, opline->op1.var - //| EXT_CALL zend_jit_undefined_op_helper, r0 - dasm_put(Dst, 2338, opline->op1.var); - if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 8161 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 5207, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 5213, tsrm_tls_index, tsrm_tls_offset); - } -#line 8165 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >1 - //|.code - dasm_put(Dst, 5285, (executor_globals_offset + offsetof(zend_executor_globals, uninitialized_zval))); -#line 8167 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| LOAD_ZVAL_ADDR FCARG2a, op2_addr - dasm_put(Dst, 70); - if (Z_MODE(op2_addr) == IS_CONST_ZVAL) { - if (IS_SIGNED_32BIT(Z_ZV(op2_addr))) { - dasm_put(Dst, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8169 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| IF_Z_TYPE FCARG2a, IS_UNDEF, >1 - //|.cold_code - dasm_put(Dst, 5295, offsetof(zval, u1.v.type), IS_UNDEF); -#line 8171 "/home/jakub/prog/php/83/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, 70); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 8174 "/home/jakub/prog/php/83/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, 5305, opline->op2.var); - if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 8177 "/home/jakub/prog/php/83/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, 5258); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 4174, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 4180, tsrm_tls_index, tsrm_tls_offset); - } -#line 8182 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >1 - //|.code - dasm_put(Dst, 5312, (executor_globals_offset + offsetof(zend_executor_globals, uninitialized_zval))); -#line 8184 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 8185 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8188 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| IF_Z_TYPE FCARG1a, IS_UNDEF, >1 - //|.cold_code - dasm_put(Dst, 5275, offsetof(zval, u1.v.type), IS_UNDEF); -#line 8190 "/home/jakub/prog/php/83/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, 70); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 8193 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1d, opline->op1.var - //| EXT_CALL zend_jit_undefined_op_helper, r0 - dasm_put(Dst, 2338, opline->op1.var); - if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 8195 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 5207, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 5213, tsrm_tls_index, tsrm_tls_offset); - } -#line 8199 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >1 - //|.code - dasm_put(Dst, 5285, (executor_globals_offset + offsetof(zend_executor_globals, uninitialized_zval))); -#line 8201 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 8202 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8204 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8208 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| IF_Z_TYPE FCARG2a, IS_UNDEF, >1 - //|.cold_code - dasm_put(Dst, 5295, offsetof(zval, u1.v.type), IS_UNDEF); -#line 8210 "/home/jakub/prog/php/83/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, 70); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 8213 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1d, opline->op2.var - //| EXT_CALL zend_jit_undefined_op_helper, r0 - dasm_put(Dst, 2338, opline->op2.var); - if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 8215 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 4174, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 4180, tsrm_tls_index, tsrm_tls_offset); - } -#line 8219 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >1 - //|.code - dasm_put(Dst, 5312, (executor_globals_offset + offsetof(zend_executor_globals, uninitialized_zval))); -#line 8221 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 8222 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8224 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8244 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8247 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 8258 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 8260 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 8268 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (not_identical_label != (uint32_t)-1) { - //| jmp =>not_identical_label - dasm_put(Dst, 1614, not_identical_label); -#line 8271 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), (opline->opcode != ZEND_IS_NOT_IDENTICAL ? IS_FALSE : IS_TRUE)); -#line 8274 "/home/jakub/prog/php/83/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, 5322, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 8283 "/home/jakub/prog/php/83/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, 5340, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 8286 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 8296 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (identical_label != (uint32_t)-1) { - //| jmp =>identical_label - dasm_put(Dst, 1614, identical_label); -#line 8299 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), (opline->opcode != ZEND_IS_NOT_IDENTICAL ? IS_TRUE : IS_FALSE)); -#line 8302 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 8309 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (identical_label != (uint32_t)-1) { - //| jmp =>identical_label - dasm_put(Dst, 1614, identical_label); -#line 8312 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), (opline->opcode != ZEND_IS_NOT_IDENTICAL ? IS_TRUE : IS_FALSE)); -#line 8315 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 8321 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (not_identical_label != (uint32_t)-1) { - //| jmp =>not_identical_label - dasm_put(Dst, 1614, not_identical_label); -#line 8324 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), (opline->opcode != ZEND_IS_NOT_IDENTICAL ? IS_FALSE : IS_TRUE)); -#line 8327 "/home/jakub/prog/php/83/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, 5358, offsetof(zval, u1.v.type), Z_TYPE_P(val)); -#line 8333 "/home/jakub/prog/php/83/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, 3726); - 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 8337 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 8342 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (identical_label != (uint32_t)-1) { - //| jmp =>identical_label - dasm_put(Dst, 1614, identical_label); -#line 8344 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >9 - dasm_put(Dst, 3717); -#line 8346 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|8: - dasm_put(Dst, 4331); -#line 8348 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (exit_addr && smart_branch_opcode == ZEND_JMPNZ) { - //| je &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 8350 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (identical_label != (uint32_t)-1) { - //| je =>identical_label - dasm_put(Dst, 4700, identical_label); -#line 8352 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| je >9 - dasm_put(Dst, 3712); -#line 8354 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - if (opline->opcode != ZEND_IS_NOT_IDENTICAL) { - //| sete al - dasm_put(Dst, 4661); -#line 8358 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| setne al - dasm_put(Dst, 4665); -#line 8360 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| movzx eax, al - //| lea eax, [eax + 2] - //| SET_ZVAL_TYPE_INFO res_addr, eax - dasm_put(Dst, 4685, 2); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 8364 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 8368 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 8375 "/home/jakub/prog/php/83/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, 1614, not_identical_label); -#line 8378 "/home/jakub/prog/php/83/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, 5363, offsetof(zval, u1.v.type), Z_TYPE_P(val)); -#line 8383 "/home/jakub/prog/php/83/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, 3726); - 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 8388 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 8393 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (identical_label != (uint32_t)-1) { - //| jmp =>identical_label - dasm_put(Dst, 1614, identical_label); -#line 8395 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >9 - dasm_put(Dst, 3717); -#line 8397 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|8: - dasm_put(Dst, 4331); -#line 8399 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (exit_addr && smart_branch_opcode == ZEND_JMPNZ) { - //| je &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 8401 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (identical_label != (uint32_t)-1) { - //| je =>identical_label - dasm_put(Dst, 4700, identical_label); -#line 8403 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| je >9 - dasm_put(Dst, 3712); -#line 8405 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - if (opline->opcode != ZEND_IS_NOT_IDENTICAL) { - //| sete al - dasm_put(Dst, 4661); -#line 8409 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| setne al - dasm_put(Dst, 4665); -#line 8411 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| movzx eax, al - //| lea eax, [eax + 2] - //| SET_ZVAL_TYPE_INFO res_addr, eax - dasm_put(Dst, 4685, 2); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 8415 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 8420 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 8428 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (not_identical_label != (uint32_t)-1) { - //| jmp =>not_identical_label - dasm_put(Dst, 1614, not_identical_label); -#line 8431 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8436 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8439 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| EXT_CALL zend_is_identical, r0 - if (MAY_USE_32BIT_ADDR(zend_is_identical)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_is_identical)); - } else { - if (IS_SIGNED_32BIT(zend_is_identical)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_is_identical)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_is_identical)), (unsigned int)((((ptrdiff_t)zend_is_identical))>>32)); - } - dasm_put(Dst, 66); - } -#line 8441 "/home/jakub/prog/php/83/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, 3547); -#line 8447 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 8449 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 8451 "/home/jakub/prog/php/83/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, 3569); -#line 8455 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (smart_branch_opcode) { - //| test al, al - dasm_put(Dst, 5368); -#line 8458 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (exit_addr) { - if (smart_branch_opcode == ZEND_JMPNZ) { - //| jnz &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 8461 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jz &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 8463 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (not_identical_label != (uint32_t)-1) { - //| jz =>not_identical_label - dasm_put(Dst, 4700, not_identical_label); -#line 8466 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (identical_label != (uint32_t)-1) { - //| jmp =>identical_label - dasm_put(Dst, 1614, identical_label); -#line 8468 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (identical_label != (uint32_t)-1) { - //| jnz =>identical_label - dasm_put(Dst, 1908, identical_label); -#line 8471 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| movzx eax, al - dasm_put(Dst, 5371); -#line 8474 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (opline->opcode != ZEND_IS_NOT_IDENTICAL) { - //| lea eax, [eax + 2] - dasm_put(Dst, 4688, 2); -#line 8476 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| neg eax - //| lea eax, [eax + 3] - dasm_put(Dst, 5375, 3); -#line 8479 "/home/jakub/prog/php/83/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, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 8481 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - //|9: - dasm_put(Dst, 4230); -#line 8485 "/home/jakub/prog/php/83/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, uint8_t 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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 8525 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 8527 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - if (true_label != (uint32_t)-1) { - //| jmp =>true_label; - dasm_put(Dst, 1614, true_label); -#line 8531 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 8537 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 8539 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - if (false_label != (uint32_t)-1) { - //| jmp =>false_label; - dasm_put(Dst, 1614, false_label); -#line 8543 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8550 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| ZVAL_DEREF FCARG1a, op1_info - if (op1_info & MAY_BE_REF) { - dasm_put(Dst, 5322, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 8551 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 8560 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 8562 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - if (true_label != (uint32_t)-1) { - //| jmp =>true_label; - dasm_put(Dst, 1614, true_label); -#line 8566 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 8573 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 8575 "/home/jakub/prog/php/83/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, 5382, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_TRUE); -#line 8579 "/home/jakub/prog/php/83/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, 5391); -#line 8586 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jl &exit_addr - dasm_put(Dst, 4716, (ptrdiff_t)(exit_addr)); -#line 8588 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (false_label != (uint32_t)-1) { - //| jl =>false_label - dasm_put(Dst, 4720, false_label); -#line 8591 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jl >9 - dasm_put(Dst, 5391); -#line 8593 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - jmp_done = 1; - } else { - //| jg >2 - dasm_put(Dst, 4493); -#line 8597 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 8604 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 8606 "/home/jakub/prog/php/83/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, 344); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 8613 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (branch_opcode == ZEND_JMPNZ || branch_opcode == ZEND_JMPNZ_EX) { - //| jmp &exit_addr - dasm_put(Dst, 146, (ptrdiff_t)(exit_addr)); -#line 8615 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >9 - dasm_put(Dst, 3717); -#line 8617 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|1: - //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE - dasm_put(Dst, 70); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 8620 "/home/jakub/prog/php/83/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, 1593, (ptrdiff_t)(exit_addr)); -#line 8623 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - } else { - if (branch_opcode == ZEND_JMPNZ || branch_opcode == ZEND_JMPNZ_EX) { - //| je &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 8628 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (!(op1_info & (MAY_BE_UNDEF|MAY_BE_LONG))) { - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 8630 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| je >9 - dasm_put(Dst, 3712); -#line 8632 "/home/jakub/prog/php/83/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, 344); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 8638 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (true_label != (uint32_t)-1) { - //| jmp =>true_label - dasm_put(Dst, 1614, true_label); -#line 8640 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >9 - dasm_put(Dst, 3717); -#line 8642 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|1: - //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE - dasm_put(Dst, 70); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 8645 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - if (true_label != (uint32_t)-1) { - //| je =>true_label - dasm_put(Dst, 4700, true_label); -#line 8648 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (!(op1_info & (MAY_BE_UNDEF|MAY_BE_LONG))) { - //| jne =>false_label - dasm_put(Dst, 1908, false_label); -#line 8650 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - jmp_done = 1; - } else { - //| je >9 - dasm_put(Dst, 3712); -#line 8653 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - } else if (set_bool) { - //| sete al - //| movzx eax, al - dasm_put(Dst, 5396); -#line 8658 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (set_bool_not) { - //| neg eax - //| add eax, 3 - dasm_put(Dst, 5403); -#line 8661 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| add eax, 2 - dasm_put(Dst, 4731); -#line 8663 "/home/jakub/prog/php/83/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, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 8668 "/home/jakub/prog/php/83/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 8678 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO res_addr, eax - dasm_put(Dst, 5382, (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 8679 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jz >1 - dasm_put(Dst, 5410, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 8680 "/home/jakub/prog/php/83/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, 5422, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); -#line 8682 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.cold_code - dasm_put(Dst, 276); -#line 8684 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 8685 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| mov FCARG1d, opline->op1.var - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 2338, 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 8688 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 8689 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 8699 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (false_label != (uint32_t)-1) { - //| jmp =>false_label - dasm_put(Dst, 1614, false_label); -#line 8702 "/home/jakub/prog/php/83/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, 3717); -#line 8707 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (false_label == (uint32_t)-1) { - //| jmp >9 - dasm_put(Dst, 3717); -#line 8710 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.code - dasm_put(Dst, 373); -#line 8712 "/home/jakub/prog/php/83/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, 3717); -#line 8720 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (op1_info & MAY_BE_LONG) { - //| jmp &exit_addr - dasm_put(Dst, 146, (ptrdiff_t)(exit_addr)); -#line 8723 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (false_label != (uint32_t)-1) { - //| jmp =>false_label - dasm_put(Dst, 1614, false_label); -#line 8726 "/home/jakub/prog/php/83/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, 3717); -#line 8728 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - } - } - - if (op1_info & MAY_BE_LONG) { - //|2: - dasm_put(Dst, 2065); -#line 8735 "/home/jakub/prog/php/83/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, 2252, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 8737 "/home/jakub/prog/php/83/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, 3590, (Z_REG(op1_addr)), (Z_REG(op1_addr))); -#line 8740 "/home/jakub/prog/php/83/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, 4640, (unsigned int)(Z_L(0)), (unsigned int)((Z_L(0))>>32), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 4652, (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, 4604, (unsigned int)(Z_L(0)), (unsigned int)((Z_L(0))>>32), (Z_REG(op1_addr))); - } else { - dasm_put(Dst, 4614, (Z_REG(op1_addr)), Z_L(0)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8742 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (set_bool) { - //| setne al - //| movzx eax, al - dasm_put(Dst, 5435); -#line 8746 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (set_bool_not) { - //| neg eax - //| add eax, 3 - dasm_put(Dst, 5403); -#line 8749 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| lea eax, [eax + 2] - dasm_put(Dst, 4688, 2); -#line 8751 "/home/jakub/prog/php/83/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, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 8753 "/home/jakub/prog/php/83/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, 1593, (ptrdiff_t)(exit_addr)); -#line 8757 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| je &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 8759 "/home/jakub/prog/php/83/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, 1908, true_label); -#line 8763 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (false_label != (uint32_t)-1) { - //| jmp =>false_label - dasm_put(Dst, 1614, false_label); -#line 8765 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| je =>false_label - dasm_put(Dst, 4700, false_label); -#line 8768 "/home/jakub/prog/php/83/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, 276); -#line 8775 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|2: - dasm_put(Dst, 2065); -#line 8777 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (CAN_USE_AVX()) { - //| vxorps xmm0, xmm0, xmm0 - dasm_put(Dst, 5442); -#line 8779 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| xorps xmm0, xmm0 - dasm_put(Dst, 5448); -#line 8781 "/home/jakub/prog/php/83/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, 5050, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 5060, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 5070, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 5078, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 5086, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 5098, (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, 5110, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 5120, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8783 "/home/jakub/prog/php/83/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 8788 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jp &exit_addr - //| jne &exit_addr - //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE - dasm_put(Dst, 5452, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 8791 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jp >1 - //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE - dasm_put(Dst, 4749); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 8794 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| je &exit_addr - //|1: - //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE - dasm_put(Dst, 5467, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 8797 "/home/jakub/prog/php/83/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, 4749); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 8801 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| je => false_label - //|1: - //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE - dasm_put(Dst, 4841, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 8804 "/home/jakub/prog/php/83/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 8806 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jp => true_label - //| jne => true_label - //| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE - dasm_put(Dst, 5481, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 8809 "/home/jakub/prog/php/83/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, 5496, IS_FALSE, IS_TRUE); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 8816 "/home/jakub/prog/php/83/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, 5496, IS_TRUE, IS_FALSE); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 8823 "/home/jakub/prog/php/83/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, 4204); -#line 8827 "/home/jakub/prog/php/83/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, 5511, (ptrdiff_t)(exit_addr), (ptrdiff_t)(exit_addr)); -#line 8834 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jp >1 - //| je &exit_addr - //|1: - dasm_put(Dst, 4804, (ptrdiff_t)(exit_addr)); -#line 8838 "/home/jakub/prog/php/83/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, 3717); -#line 8841 "/home/jakub/prog/php/83/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, 4754, false_label); -#line 8848 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (true_label != (uint32_t)-1) { - //| jmp =>true_label - dasm_put(Dst, 1614, true_label); -#line 8850 "/home/jakub/prog/php/83/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, 3717); -#line 8852 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| jp => true_label - //| jne => true_label - dasm_put(Dst, 5489, true_label, true_label); -#line 8856 "/home/jakub/prog/php/83/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, 3717); -#line 8858 "/home/jakub/prog/php/83/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, 373); -#line 8863 "/home/jakub/prog/php/83/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, 276); -#line 8868 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 8869 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 8872 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 8874 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL zend_is_true, r0 - if (MAY_USE_32BIT_ADDR(zend_is_true)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_is_true)); - } else { - if (IS_SIGNED_32BIT(zend_is_true)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_is_true)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_is_true)), (unsigned int)((((ptrdiff_t)zend_is_true))>>32)); - } - dasm_put(Dst, 66); - } -#line 8875 "/home/jakub/prog/php/83/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, 5520, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); -#line 8882 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| GET_ZVAL_PTR FCARG1a, op1_addr - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); -#line 8884 "/home/jakub/prog/php/83/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, 5534, (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))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } while(0); -#line 8888 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov r0, aword T1 // restore - //|3: - dasm_put(Dst, 5553); -#line 8890 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (may_throw) { - //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r1 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 1808, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 1814, tsrm_tls_index, tsrm_tls_offset); - } -#line 8893 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne ->exception_handler_undef - dasm_put(Dst, 5560, (executor_globals_offset+offsetof(zend_executor_globals, exception))); -#line 8894 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - if (set_bool) { - if (set_bool_not) { - //| neg eax - //| add eax, 3 - dasm_put(Dst, 5403); -#line 8900 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| add eax, 2 - dasm_put(Dst, 4731); -#line 8902 "/home/jakub/prog/php/83/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, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 8904 "/home/jakub/prog/php/83/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, 5382, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type), IS_FALSE); -#line 8906 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (branch_opcode == ZEND_JMPNZ || branch_opcode == ZEND_JMPNZ_EX) { - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 8908 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| je &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 8910 "/home/jakub/prog/php/83/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, 5382, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type), IS_FALSE); -#line 8913 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (true_label != (uint32_t)-1) { - //| jne =>true_label - dasm_put(Dst, 1908, true_label); -#line 8915 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (false_label != (uint32_t)-1) { - //| jmp =>false_label - dasm_put(Dst, 1614, false_label); -#line 8917 "/home/jakub/prog/php/83/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, 3717); -#line 8919 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| je =>false_label - dasm_put(Dst, 4700, false_label); -#line 8922 "/home/jakub/prog/php/83/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, 4204); -#line 8927 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| test r0, r0 - dasm_put(Dst, 3655); -#line 8930 "/home/jakub/prog/php/83/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, 1593, (ptrdiff_t)(exit_addr)); -#line 8933 "/home/jakub/prog/php/83/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, 3717); -#line 8935 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| je &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 8938 "/home/jakub/prog/php/83/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, 3717); -#line 8940 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - } else if (true_label != (uint32_t)-1) { - //| jne =>true_label - dasm_put(Dst, 1908, true_label); -#line 8944 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (false_label != (uint32_t)-1) { - //| jmp =>false_label - dasm_put(Dst, 1614, false_label); -#line 8946 "/home/jakub/prog/php/83/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, 3717); -#line 8948 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| je =>false_label - dasm_put(Dst, 4700, false_label); -#line 8951 "/home/jakub/prog/php/83/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, 3717); -#line 8953 "/home/jakub/prog/php/83/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, 373); -#line 8958 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - } - - //|9: - dasm_put(Dst, 4230); -#line 8963 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 9046 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| MEM_LOAD_OP_ZTS sub, r1, aword, executor_globals, vm_stack_top, r0 - dasm_put(Dst, 5570, (executor_globals_offset+offsetof(zend_executor_globals, vm_stack_end))); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 9047 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| cmp r1, used_stack - //| jb &exit_addr - dasm_put(Dst, 5576, (executor_globals_offset+offsetof(zend_executor_globals, vm_stack_top)), used_stack, (ptrdiff_t)(exit_addr)); -#line 9049 "/home/jakub/prog/php/83/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, 5589, offsetof(zend_function, type), used_stack); -#line 9071 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov FCARG1a, used_stack - dasm_put(Dst, 798, used_stack); -#line 9073 "/home/jakub/prog/php/83/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, 5603, opline->extended_value); -#line 9076 "/home/jakub/prog/php/83/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, 5606, 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 9081 "/home/jakub/prog/php/83/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, 5606, 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 9086 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| shl edx, 4 - //|.if X64 - //| movsxd r2, edx - //|.endif - //| sub FCARG1a, r2 - //|1: - dasm_put(Dst, 5620); -#line 9093 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 512, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 518, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 530, (executor_globals_offset+offsetof(zend_executor_globals, vm_stack_top))); -#line 9099 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - - if (stack_check) { - //| // Check Stack Overflow - //| MEM_LOAD_ZTS r2, aword, executor_globals, vm_stack_end, r2 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 5632, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 5638, tsrm_tls_index, tsrm_tls_offset); - } -#line 9103 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| sub r2, RX - dasm_put(Dst, 5655, (executor_globals_offset+offsetof(zend_executor_globals, vm_stack_end))); -#line 9104 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (func) { - //| cmp r2, used_stack - dasm_put(Dst, 5664, used_stack); -#line 9106 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| cmp r2, FCARG1a - dasm_put(Dst, 5670); -#line 9108 "/home/jakub/prog/php/83/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, 4782, (ptrdiff_t)(exit_addr)); -#line 9119 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jb >1 - //| // EG(vm_stack_top) = (zval*)((char*)call + used_stack); - //|.cold_code - dasm_put(Dst, 5675); -#line 9123 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 9124 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (func) { - //| mov FCARG1d, used_stack - dasm_put(Dst, 2338, used_stack); -#line 9126 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 9133 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_int_extend_stack_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_int_extend_stack_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_int_extend_stack_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_int_extend_stack_helper)), (unsigned int)((((ptrdiff_t)zend_jit_int_extend_stack_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 9134 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)func)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32)); - } -#line 9141 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov FCARG2a, r0 - dasm_put(Dst, 3454); -#line 9143 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| lea FCARG2a, aword [r0 + offsetof(zend_closure, func)] - dasm_put(Dst, 5681, offsetof(zend_closure, func)); -#line 9146 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 9148 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_extend_stack_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_extend_stack_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_extend_stack_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_extend_stack_helper)), (unsigned int)((((ptrdiff_t)zend_jit_extend_stack_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 9149 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| mov RX, r0 - //| jmp >1 - //|.code - dasm_put(Dst, 5686); -#line 9153 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - if (func) { - //| MEM_UPDATE_ZTS add, aword, executor_globals, vm_stack_top, used_stack, r2 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 5632, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 5638, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 5695, (executor_globals_offset+offsetof(zend_executor_globals, vm_stack_top)), used_stack); -#line 9158 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| MEM_UPDATE_ZTS add, aword, executor_globals, vm_stack_top, FCARG1a, r2 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 5632, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 5638, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 5701, (executor_globals_offset+offsetof(zend_executor_globals, vm_stack_top))); -#line 9160 "/home/jakub/prog/php/83/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, 5706, Dt1(->This.u1.type_info), (IS_UNDEF | ZEND_CALL_NESTED_FUNCTION)); -#line 9165 "/home/jakub/prog/php/83/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, 70); - if (IS_SIGNED_32BIT(func)) { - dasm_put(Dst, 5712, Dt1(->func), ((ptrdiff_t)func)); - } else { - dasm_put(Dst, 5718, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32), Dt1(->func)); - } -#line 9174 "/home/jakub/prog/php/83/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, 5712, Dt1(->func), ((ptrdiff_t)func)); - } else { - dasm_put(Dst, 5718, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32), Dt1(->func)); - } -#line 9182 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov aword EX:RX->func, r0 - dasm_put(Dst, 1553, Dt1(->func)); -#line 9184 "/home/jakub/prog/php/83/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, 5727, offsetof(zend_closure, func), Dt1(->func)); -#line 9189 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|1: - dasm_put(Dst, 70); -#line 9191 "/home/jakub/prog/php/83/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, 5736, Dt1(->This.value.ptr)); -#line 9196 "/home/jakub/prog/php/83/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, 5706, Dt1(->This.u1.type_info), ZEND_CALL_HAS_THIS); -#line 9200 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| or dword EX:RX->This.u1.type_info, ZEND_CALL_HAS_THIS - dasm_put(Dst, 5745, Dt1(->This.u1.type_info), ZEND_CALL_HAS_THIS); -#line 9202 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - if (opline->op1_type == IS_CV) { - //| // GC_ADDREF(obj); - //| add dword [r1], 1 - dasm_put(Dst, 5751); -#line 9207 "/home/jakub/prog/php/83/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, 5706, Dt1(->This.u1.type_info), (ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS)); -#line 9211 "/home/jakub/prog/php/83/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, 5745, Dt1(->This.u1.type_info), (ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS)); -#line 9213 "/home/jakub/prog/php/83/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, 1540, Dt1(->This.value.ptr)); -#line 9218 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - if (opline->op2_type == IS_CV) { - //| // GC_ADDREF(closure); - //| add dword [r0], 1 - dasm_put(Dst, 5755); -#line 9222 "/home/jakub/prog/php/83/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, 5759, 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, 53, (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, 56, ((ptrdiff_t)zend_jit_init_func_run_time_cache_helper)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 9247 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 9248 "/home/jakub/prog/php/83/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, 5706, Dt1(->This.u2.num_args), opline->extended_value); -#line 9251 "/home/jakub/prog/php/83/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, 5815, Dt1(->call)); -#line 9282 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - while (level > 0) { - //| mov r1, EX:r1->prev_execute_data - dasm_put(Dst, 1826, Dt1(->prev_execute_data)); -#line 9284 "/home/jakub/prog/php/83/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, 1826, Dt1(->func)); - if (!IS_SIGNED_32BIT(opcodes)) { -#line 9296 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov64 r2, ((ptrdiff_t)opcodes) - //| cmp aword [r1 + offsetof(zend_op_array, opcodes)], r2 - dasm_put(Dst, 5820, (unsigned int)(((ptrdiff_t)opcodes)), (unsigned int)((((ptrdiff_t)opcodes))>>32), offsetof(zend_op_array, opcodes)); - } else { -#line 9299 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| cmp aword [r1 + offsetof(zend_op_array, opcodes)], opcodes - dasm_put(Dst, 5829, offsetof(zend_op_array, opcodes), opcodes); - } -#line 9301 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| .else - //| cmp aword [r1 + offsetof(zend_op_array, opcodes)], opcodes - //| .endif - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 9305 "/home/jakub/prog/php/83/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, 5820, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32), Dt1(->func)); - } else { -#line 9311 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| cmp aword EX:r1->func, func - dasm_put(Dst, 5829, Dt1(->func), func); - } -#line 9313 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| .else - //| cmp aword EX:r1->func, func - //| .endif - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 9317 "/home/jakub/prog/php/83/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, 5835, Dt1(->func)); -#line 9370 "/home/jakub/prog/php/83/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, 5840, Dt1(->run_time_cache), opline->result.num); -#line 9375 "/home/jakub/prog/php/83/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, 5849, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32)); - } else { -#line 9385 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| cmp r0, func - dasm_put(Dst, 3659, func); - } -#line 9387 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| .else - //| cmp r0, func - //| .endif - //| jnz >1 - //|.cold_code - dasm_put(Dst, 272); -#line 9392 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 9393 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| test r0, r0 - //| jz >1 - dasm_put(Dst, 5857); -#line 9396 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.cold_code - dasm_put(Dst, 276); -#line 9398 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 9399 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)func)); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32)); - } -#line 9404 "/home/jakub/prog/php/83/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, 5865, opline->result.num); - if (MAY_USE_32BIT_ADDR(zend_jit_init_func_run_time_cache_helper)) { - dasm_put(Dst, 53, (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, 56, ((ptrdiff_t)zend_jit_init_func_run_time_cache_helper)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 9406 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >3 - dasm_put(Dst, 3991); -#line 9407 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_STR_P(zv))); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)Z_STR_P(zv))), (unsigned int)((((ptrdiff_t)Z_STR_P(zv)))>>32)); - } -#line 9412 "/home/jakub/prog/php/83/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, 5870, opline->result.num); - if (MAY_USE_32BIT_ADDR(zend_jit_find_func_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_find_func_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_find_func_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_find_func_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_find_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_find_func_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 9414 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_STR_P(zv + 1))); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)Z_STR_P(zv + 1))), (unsigned int)((((ptrdiff_t)Z_STR_P(zv + 1)))>>32)); - } -#line 9416 "/home/jakub/prog/php/83/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, 5870, opline->result.num); - if (MAY_USE_32BIT_ADDR(zend_jit_find_func_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_find_func_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_find_func_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_find_func_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_find_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_find_func_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 9418 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)zv)); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)zv)), (unsigned int)((((ptrdiff_t)zv))>>32)); - } -#line 9420 "/home/jakub/prog/php/83/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, 5870, opline->result.num); - if (MAY_USE_32BIT_ADDR(zend_jit_find_ns_func_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_find_ns_func_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_find_ns_func_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_find_ns_func_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_find_ns_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_find_ns_func_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 9422 "/home/jakub/prog/php/83/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, 5875); -#line 9436 "/home/jakub/prog/php/83/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, 5883, (unsigned int)(((ptrdiff_t)opcodes)), (unsigned int)((((ptrdiff_t)opcodes))>>32), offsetof(zend_op_array, opcodes)); - } else { -#line 9445 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| cmp aword [r0 + offsetof(zend_op_array, opcodes)], opcodes - dasm_put(Dst, 5892, offsetof(zend_op_array, opcodes), opcodes); - } -#line 9447 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| .else - //| cmp aword [r0 + offsetof(zend_op_array, opcodes)], opcodes - //| .endif - //| jz >3 - dasm_put(Dst, 4027); -#line 9451 "/home/jakub/prog/php/83/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, 5849, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32)); - } else { -#line 9457 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| cmp r0, func - dasm_put(Dst, 3659, func); - } -#line 9459 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| .else - //| cmp r0, func - //| .endif - //| jz >3 - dasm_put(Dst, 4027); -#line 9463 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jmp &exit_addr - dasm_put(Dst, 146, (ptrdiff_t)(exit_addr)); -#line 9465 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| test r0, r0 - //| jnz >3 - //| // SAVE_OPLINE(); - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 5875); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 9470 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->undefined_function - dasm_put(Dst, 5898); -#line 9471 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - //|.code - dasm_put(Dst, 373); -#line 9474 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|3: - dasm_put(Dst, 333); -#line 9475 "/home/jakub/prog/php/83/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, 4245, (Z_REG(this_addr)), Z_OFFSET(this_addr)); -#line 9538 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 9543 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| ZVAL_DEREF FCARG1a, op1_info - if (op1_info & MAY_BE_REF) { - dasm_put(Dst, 5322, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 9545 "/home/jakub/prog/php/83/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 9550 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| LOAD_ZVAL_ADDR FCARG1a, op1_addr - dasm_put(Dst, 336, (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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 9551 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_unref_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_unref_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_unref_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_unref_helper)), (unsigned int)((((ptrdiff_t)zend_jit_unref_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 9552 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 9553 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT, (ptrdiff_t)(exit_addr)); -#line 9564 "/home/jakub/prog/php/83/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 9566 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 3386, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT); -#line 9567 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 9568 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 9570 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 9572 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_invalid_method_call_tmp)); - } else { - if (IS_SIGNED_32BIT(zend_jit_invalid_method_call_tmp)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_invalid_method_call_tmp)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_invalid_method_call_tmp)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_method_call_tmp))>>32)); - } - dasm_put(Dst, 66); - } -#line 9574 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_invalid_method_call)); - } else { - if (IS_SIGNED_32BIT(zend_jit_invalid_method_call)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_invalid_method_call)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_invalid_method_call)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_method_call))>>32)); - } - dasm_put(Dst, 66); - } -#line 9576 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jmp ->exception_handler - //|.code - dasm_put(Dst, 5915); -#line 9579 "/home/jakub/prog/php/83/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, 4245, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 9582 "/home/jakub/prog/php/83/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, 3959); -#line 9591 "/home/jakub/prog/php/83/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, 5921, Dt1(->run_time_cache), opline->result.num + sizeof(void*)); -#line 9598 "/home/jakub/prog/php/83/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, 5937, Dt1(->run_time_cache), opline->result.num, offsetof(zend_object, ce), opline->result.num + sizeof(void*)); -#line 9606 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|.cold_code - dasm_put(Dst, 276); -#line 9609 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| LOAD_ADDR FCARG2a, function_name - dasm_put(Dst, 70); - if (IS_SIGNED_32BIT(function_name)) { - dasm_put(Dst, 751, ((ptrdiff_t)function_name)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)function_name)), (unsigned int)((((ptrdiff_t)function_name))>>32)); - } -#line 9611 "/home/jakub/prog/php/83/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, 5958); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 9619 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_find_method_tmp_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_find_method_tmp_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_find_method_tmp_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_find_method_tmp_helper)), (unsigned int)((((ptrdiff_t)zend_jit_find_method_tmp_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 9621 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_find_method_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_find_method_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_find_method_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_find_method_helper)), (unsigned int)((((ptrdiff_t)zend_jit_find_method_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 9623 "/home/jakub/prog/php/83/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, 5963); -#line 9631 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 9632 "/home/jakub/prog/php/83/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, 5883, (unsigned int)(((ptrdiff_t)opcodes)), (unsigned int)((((ptrdiff_t)opcodes))>>32), offsetof(zend_op_array, opcodes)); - } else { -#line 9664 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| cmp aword [r0 + offsetof(zend_op_array, opcodes)], opcodes - dasm_put(Dst, 5892, offsetof(zend_op_array, opcodes), opcodes); - } -#line 9666 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| .else - //| cmp aword [r0 + offsetof(zend_op_array, opcodes)], opcodes - //| .endif - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 9670 "/home/jakub/prog/php/83/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, 5849, (unsigned int)(((ptrdiff_t)func)), (unsigned int)((((ptrdiff_t)func))>>32)); - } else { -#line 9676 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| cmp r0, func - dasm_put(Dst, 3659, func); - } -#line 9678 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| .else - //| cmp r0, func - //| .endif - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 9682 "/home/jakub/prog/php/83/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, 5976, offsetof(zend_function, common.fn_flags), ZEND_ACC_STATIC); -#line 9690 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 9691 "/home/jakub/prog/php/83/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, 5987, opline->extended_value); -#line 9702 "/home/jakub/prog/php/83/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, 53, (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, 56, ((ptrdiff_t)zend_jit_push_static_metod_call_frame_tmp)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 9704 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_push_static_metod_call_frame)); - } else { - if (IS_SIGNED_32BIT(zend_jit_push_static_metod_call_frame)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_push_static_metod_call_frame)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 9706 "/home/jakub/prog/php/83/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, 5997); -#line 9713 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| mov RX, r0 - dasm_put(Dst, 6005); -#line 9715 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - if (!func) { - //| jmp >9 - //|.code - dasm_put(Dst, 4204); -#line 9720 "/home/jakub/prog/php/83/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, 4230); -#line 9730 "/home/jakub/prog/php/83/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, 6009, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); -#line 9759 "/home/jakub/prog/php/83/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, 6017, (unsigned int)(((ptrdiff_t)zend_ce_closure)), (unsigned int)((((ptrdiff_t)zend_ce_closure))>>32), offsetof(zend_object, ce)); - } else { -#line 9774 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| cmp aword [r0 + offsetof(zend_object, ce)], zend_ce_closure - dasm_put(Dst, 5892, offsetof(zend_object, ce), zend_ce_closure); - } -#line 9776 "/home/jakub/prog/php/83/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, 1593, (ptrdiff_t)(exit_addr)); -#line 9780 "/home/jakub/prog/php/83/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, 6017, (unsigned int)(((ptrdiff_t)opcodes)), (unsigned int)((((ptrdiff_t)opcodes))>>32), offsetof(zend_closure, func.op_array.opcodes)); - } else { -#line 9808 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| cmp aword [r0 + offsetof(zend_closure, func.op_array.opcodes)], opcodes - dasm_put(Dst, 5892, offsetof(zend_closure, func.op_array.opcodes), opcodes); - } -#line 9810 "/home/jakub/prog/php/83/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, 1593, (ptrdiff_t)(exit_addr)); -#line 9814 "/home/jakub/prog/php/83/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 9938 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 9945 "/home/jakub/prog/php/83/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, 6026, Dt1(->func), offsetof(zend_op_array, fn_flags), ZEND_ACC_DEPRECATED, (ptrdiff_t)(exit_addr)); -#line 9958 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - } - - if (!delayed_call_chain) { - if (call_level == 1) { - //| mov aword EX->call, 0 - dasm_put(Dst, 6039, Dt1(->call)); -#line 9965 "/home/jakub/prog/php/83/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, 6048, Dt1(->prev_execute_data), Dt1(->call)); -#line 9969 "/home/jakub/prog/php/83/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, 6057, Dt1(->prev_execute_data)); -#line 9975 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - - if (!func) { - //| mov r0, EX:RX->func - dasm_put(Dst, 6062, Dt1(->func)); -#line 9978 "/home/jakub/prog/php/83/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, 5976, offsetof(zend_op_array, fn_flags), ZEND_ACC_DEPRECATED); -#line 9986 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 9987 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (!GCC_GLOBAL_REGS) { - //| mov FCARG1a, RX - dasm_put(Dst, 558); -#line 9989 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_deprecated_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_deprecated_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_deprecated_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_deprecated_helper)), (unsigned int)((((ptrdiff_t)zend_jit_deprecated_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 9991 "/home/jakub/prog/php/83/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, 6067, Dt1(->func)); -#line 9996 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 9997 "/home/jakub/prog/php/83/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, 558); -#line 10001 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_deprecated_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_deprecated_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_deprecated_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_deprecated_helper)), (unsigned int)((((ptrdiff_t)zend_jit_deprecated_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 10003 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| test al, al - //| je ->exception_handler - dasm_put(Dst, 6083); -#line 10005 "/home/jakub/prog/php/83/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, 3722, offsetof(zend_function, type), ZEND_USER_FUNCTION); -#line 10013 "/home/jakub/prog/php/83/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, 1540, Dt1(->call)); -#line 10019 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 10023 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov aword EX:RX->return_value, r2 - dasm_put(Dst, 6090, Dt1(->return_value)); -#line 10024 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| // EX(return_value) = 0; - //| mov aword EX:RX->return_value, 0 - dasm_put(Dst, 1540, Dt1(->return_value)); -#line 10027 "/home/jakub/prog/php/83/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, 6095, Dt1(->run_time_cache), Dt1(->run_time_cache)); -#line 10036 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 1808, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 1814, tsrm_tls_index, tsrm_tls_offset); - } -#line 10042 "/home/jakub/prog/php/83/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, 6104, (compiler_globals_offset+offsetof(zend_compiler_globals, map_ptr_base)), (uintptr_t)ZEND_MAP_PTR(func->op_array.run_time_cache)); -#line 10043 "/home/jakub/prog/php/83/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, 6113, Dt1(->func), offsetof(zend_op_array, run_time_cache__ptr)); -#line 10050 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - if (func) { - //| mov r0, EX:RX->func - dasm_put(Dst, 6062, Dt1(->func)); -#line 10053 "/home/jakub/prog/php/83/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, 6122, offsetof(zend_op_array, run_time_cache__ptr)); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 1808, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 1814, tsrm_tls_index, tsrm_tls_offset); - } -#line 10058 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov r2, aword [r2] - //|1: - dasm_put(Dst, 6140, (compiler_globals_offset+offsetof(zend_compiler_globals, map_ptr_base))); -#line 10060 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| mov EX:RX->run_time_cache, r2 - dasm_put(Dst, 6090, Dt1(->run_time_cache)); -#line 10062 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - //| // EG(current_execute_data) = execute_data; - //| MEM_STORE_ZTS aword, executor_globals, current_execute_data, RX, r1 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 1808, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 1814, tsrm_tls_index, tsrm_tls_offset); - } -#line 10067 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FP, RX - dasm_put(Dst, 6150, (executor_globals_offset+offsetof(zend_executor_globals, current_execute_data))); -#line 10068 "/home/jakub/prog/php/83/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, 5706, n+offsetof(zval,u1.type_info), IS_UNDEF); -#line 10075 "/home/jakub/prog/php/83/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, 1569, ((ptrdiff_t)(func->op_array.opcodes + num_args))); - } else { - dasm_put(Dst, 1574, (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, 313, Dt1(->opline), ((ptrdiff_t)(func->op_array.opcodes + num_args))); - } else { - dasm_put(Dst, 1579, (unsigned int)(((ptrdiff_t)(func->op_array.opcodes + num_args))), (unsigned int)((((ptrdiff_t)(func->op_array.opcodes + num_args)))>>32), Dt1(->opline)); - } - } -#line 10095 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov r0, EX->func - dasm_put(Dst, 5835, Dt1(->func)); -#line 10097 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (GCC_GLOBAL_REGS) { - //| mov IP, aword [r0 + offsetof(zend_op_array, opcodes)] - dasm_put(Dst, 6159, offsetof(zend_op_array, opcodes)); -#line 10099 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (num_args) { - //| add IP, (num_args * sizeof(zend_op)) - dasm_put(Dst, 1558, (num_args * sizeof(zend_op))); -#line 10101 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| mov FCARG1a, aword [r0 + offsetof(zend_op_array, opcodes)] - dasm_put(Dst, 6164, offsetof(zend_op_array, opcodes)); -#line 10104 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (num_args) { - //| add FCARG1a, (num_args * sizeof(zend_op)) - dasm_put(Dst, 6169, (num_args * sizeof(zend_op))); -#line 10106 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| mov aword EX->opline, FCARG1a - dasm_put(Dst, 6174, Dt1(->opline)); -#line 10108 "/home/jakub/prog/php/83/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 10116 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1a, FP - //| EXT_CALL zend_observer_fcall_begin, r0 - dasm_put(Dst, 73); - if (MAY_USE_32BIT_ADDR(zend_observer_fcall_begin)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_observer_fcall_begin)); - } else { - if (IS_SIGNED_32BIT(zend_observer_fcall_begin)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_observer_fcall_begin)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_observer_fcall_begin)), (unsigned int)((((ptrdiff_t)zend_observer_fcall_begin))>>32)); - } - dasm_put(Dst, 66); - } -#line 10118 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } -#ifdef CONTEXT_THREADED_JIT - //| call >1 - //|.cold_code - dasm_put(Dst, 6179); -#line 10122 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| pop r0 - //| jmp =>num_args - //|.code - dasm_put(Dst, 6184, num_args); -#line 10126 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" -#else - //| jmp =>num_args - dasm_put(Dst, 1614, num_args); -#line 10128 "/home/jakub/prog/php/83/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, 1569, ((ptrdiff_t)(func->op_array.opcodes))); - } else { - dasm_put(Dst, 1574, (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, 313, Dt1(->opline), ((ptrdiff_t)(func->op_array.opcodes))); - } else { - dasm_put(Dst, 1579, (unsigned int)(((ptrdiff_t)(func->op_array.opcodes))), (unsigned int)((((ptrdiff_t)(func->op_array.opcodes)))>>32), Dt1(->opline)); - } - } -#line 10137 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (GCC_GLOBAL_REGS) { - //| mov IP, aword [r0 + offsetof(zend_op_array, opcodes)] - dasm_put(Dst, 6159, offsetof(zend_op_array, opcodes)); -#line 10139 "/home/jakub/prog/php/83/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, 6192, offsetof(zend_op_array, opcodes), Dt1(->opline)); -#line 10142 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - if (!GCC_GLOBAL_REGS) { - //| mov FCARG1a, FP - dasm_put(Dst, 73); -#line 10146 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_copy_extra_args_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_copy_extra_args_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_copy_extra_args_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_copy_extra_args_helper)), (unsigned int)((((ptrdiff_t)zend_jit_copy_extra_args_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 10148 "/home/jakub/prog/php/83/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, 1569, ((ptrdiff_t)(func->op_array.opcodes))); - } else { - dasm_put(Dst, 1574, (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, 313, Dt1(->opline), ((ptrdiff_t)(func->op_array.opcodes))); - } else { - dasm_put(Dst, 1579, (unsigned int)(((ptrdiff_t)(func->op_array.opcodes))), (unsigned int)((((ptrdiff_t)(func->op_array.opcodes)))>>32), Dt1(->opline)); - } - } -#line 10153 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (GCC_GLOBAL_REGS) { - //| mov IP, aword [r0 + offsetof(zend_op_array, opcodes)] - dasm_put(Dst, 6159, offsetof(zend_op_array, opcodes)); -#line 10155 "/home/jakub/prog/php/83/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, 6192, offsetof(zend_op_array, opcodes), Dt1(->opline)); -#line 10158 "/home/jakub/prog/php/83/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, 6201, offsetof(zend_execute_data, This.u2.num_args), (func->op_array.num_args)); -#line 10164 "/home/jakub/prog/php/83/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, 6210, offsetof(zend_op_array, num_args), offsetof(zend_execute_data, This.u2.num_args)); -#line 10171 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jg >1 - //|.cold_code - dasm_put(Dst, 6220); -#line 10174 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 10175 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (!GCC_GLOBAL_REGS) { - //| mov FCARG1a, FP - dasm_put(Dst, 73); -#line 10177 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_copy_extra_args_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_copy_extra_args_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_copy_extra_args_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_copy_extra_args_helper)), (unsigned int)((((ptrdiff_t)zend_jit_copy_extra_args_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 10179 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (!func) { - //| mov r0, EX->func // reload - dasm_put(Dst, 5835, Dt1(->func)); -#line 10181 "/home/jakub/prog/php/83/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, 6226, offsetof(zend_execute_data, This.u2.num_args)); -#line 10185 "/home/jakub/prog/php/83/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, 6236, offsetof(zend_op_array, fn_flags), ZEND_ACC_HAS_TYPE_HINTS); -#line 10190 "/home/jakub/prog/php/83/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, 6246); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 6253); - } else { - dasm_put(Dst, 6257, Dt1(->opline)); - } -#line 10200 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|1: - //| // if (EXPECTED((int)num_args < op_array->last_var)) { - dasm_put(Dst, 70); -#line 10203 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (func) { - //| mov edx, (func->op_array.last_var) - dasm_put(Dst, 5603, (func->op_array.last_var)); -#line 10205 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov edx, dword [r0 + offsetof(zend_op_array, last_var)] - dasm_put(Dst, 6118, offsetof(zend_op_array, last_var)); -#line 10207 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| sub edx, ecx - //| jle >3 //??? - //| // zval *var = EX_VAR_NUM(num_args); - dasm_put(Dst, 6262); -#line 10211 "/home/jakub/prog/php/83/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, 6269, (ZEND_CALL_FRAME_SLOT * sizeof(zval)), offsetof(zval,u1.type_info), IS_UNDEF, 16); -#line 10222 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - if (ZEND_OBSERVER_ENABLED) { - if (trace && (trace->op != ZEND_JIT_TRACE_END || trace->stop != ZEND_JIT_TRACE_STOP_INTERPRETER)) { - ZEND_ASSERT(trace[1].op == ZEND_JIT_TRACE_VM || trace[1].op == ZEND_JIT_TRACE_END); - //| SET_EX_OPLINE trace[1].opline, r0 - if (trace[1].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(trace[1].opline)) { - dasm_put(Dst, 313, Dt1(->opline), ((ptrdiff_t)trace[1].opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)trace[1].opline)), (unsigned int)((((ptrdiff_t)trace[1].opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 10228 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| SAVE_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 8, Dt1(->opline)); - } -#line 10230 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| mov FCARG1a, FP - //| EXT_CALL zend_observer_fcall_begin, r0 - dasm_put(Dst, 73); - if (MAY_USE_32BIT_ADDR(zend_observer_fcall_begin)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_observer_fcall_begin)); - } else { - if (IS_SIGNED_32BIT(zend_observer_fcall_begin)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_observer_fcall_begin)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_observer_fcall_begin)), (unsigned int)((((ptrdiff_t)zend_observer_fcall_begin))>>32)); - } - dasm_put(Dst, 66); - } -#line 10233 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - if (trace) { - if (!func && (opline->opcode != ZEND_DO_UCALL)) { - //| jmp >9 - dasm_put(Dst, 3717); -#line 10238 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { -#ifdef CONTEXT_THREADED_JIT - //| call ->context_threaded_call - dasm_put(Dst, 1912); -#line 10242 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (!func && (opline->opcode != ZEND_DO_UCALL)) { - //| jmp >9 - dasm_put(Dst, 3717); -#line 10244 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| call ->context_threaded_call - dasm_put(Dst, 1912); -#line 10246 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (!func) { - //| jmp >9 - dasm_put(Dst, 3717); -#line 10248 "/home/jakub/prog/php/83/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, 97); - #endif -#line 10252 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 10253 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (GCC_GLOBAL_REGS) { - //| add r4, SPAD // stack alignment - //| JMP_IP - dasm_put(Dst, 115); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 10256 "/home/jakub/prog/php/83/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, 120); -#line 10262 "/home/jakub/prog/php/83/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, 4331); -#line 10271 "/home/jakub/prog/php/83/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, 6030, offsetof(zend_op_array, fn_flags), ZEND_ACC_DEPRECATED, (ptrdiff_t)(exit_addr)); -#line 10283 "/home/jakub/prog/php/83/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, 5976, offsetof(zend_op_array, fn_flags), ZEND_ACC_DEPRECATED); -#line 10287 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 10288 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (!GCC_GLOBAL_REGS) { - //| mov FCARG1a, RX - dasm_put(Dst, 558); -#line 10290 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_deprecated_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_deprecated_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_deprecated_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_deprecated_helper)), (unsigned int)((((ptrdiff_t)zend_jit_deprecated_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 10292 "/home/jakub/prog/php/83/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, 6067, Dt1(->func)); -#line 10297 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 10298 "/home/jakub/prog/php/83/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, 558); -#line 10302 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_deprecated_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_deprecated_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_deprecated_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_deprecated_helper)), (unsigned int)((((ptrdiff_t)zend_jit_deprecated_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 10304 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| test al, al - //| je ->exception_handler - //| mov r0, EX:RX->func // reload - dasm_put(Dst, 6300, Dt1(->func)); -#line 10307 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - //| // EG(current_execute_data) = execute_data; - //| MEM_STORE_ZTS aword, executor_globals, current_execute_data, RX, r1 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 1808, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 1814, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 6311, (executor_globals_offset+offsetof(zend_executor_globals, current_execute_data))); -#line 10312 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - - if (ZEND_OBSERVER_ENABLED) { - //| mov FCARG1a, RX - //| EXT_CALL zend_observer_fcall_begin, r0 - dasm_put(Dst, 558); - if (MAY_USE_32BIT_ADDR(zend_observer_fcall_begin)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_observer_fcall_begin)); - } else { - if (IS_SIGNED_32BIT(zend_observer_fcall_begin)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_observer_fcall_begin)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_observer_fcall_begin)), (unsigned int)((((ptrdiff_t)zend_observer_fcall_begin))>>32)); - } - dasm_put(Dst, 66); - } -#line 10316 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov r0, EX:RX->func // reload - dasm_put(Dst, 6062, Dt1(->func)); -#line 10317 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 10321 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_Z_TYPE_INFO FCARG2a, IS_NULL - dasm_put(Dst, 314, offsetof(zval,u1.type_info), IS_NULL); -#line 10322 "/home/jakub/prog/php/83/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, 558); - if (MAY_USE_32BIT_ADDR(zend_execute_internal)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_execute_internal)); - } else { - if (IS_SIGNED_32BIT(zend_execute_internal)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_execute_internal)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_execute_internal)), (unsigned int)((((ptrdiff_t)zend_execute_internal))>>32)); - } - dasm_put(Dst, 66); - } -#line 10335 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov FCARG1a, RX - dasm_put(Dst, 558); -#line 10337 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(func->internal_function.handler)); - } else { - if (IS_SIGNED_32BIT(func->internal_function.handler)) { - dasm_put(Dst, 56, ((ptrdiff_t)func->internal_function.handler)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)func->internal_function.handler)), (unsigned int)((((ptrdiff_t)func->internal_function.handler))>>32)); - } - dasm_put(Dst, 66); - } -#line 10339 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| call aword [r0 + offsetof(zend_internal_function, handler)] - dasm_put(Dst, 6316, offsetof(zend_internal_function, handler)); -#line 10341 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 10346 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1a, RX - //| EXT_CALL zend_observer_fcall_end, r0 - dasm_put(Dst, 558); - if (MAY_USE_32BIT_ADDR(zend_observer_fcall_end)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_observer_fcall_end)); - } else { - if (IS_SIGNED_32BIT(zend_observer_fcall_end)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_observer_fcall_end)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_observer_fcall_end)), (unsigned int)((((ptrdiff_t)zend_observer_fcall_end))>>32)); - } - dasm_put(Dst, 66); - } -#line 10348 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //| // EG(current_execute_data) = execute_data; - //| MEM_STORE_ZTS aword, executor_globals, current_execute_data, FP, r0 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 6321, (executor_globals_offset+offsetof(zend_executor_globals, current_execute_data))); -#line 10352 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_RX, offset)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - 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))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } -#line 10359 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - } else { - //| mov FCARG1a, RX - //| EXT_CALL zend_jit_vm_stack_free_args_helper, r0 - dasm_put(Dst, 558); - if (MAY_USE_32BIT_ADDR(zend_jit_vm_stack_free_args_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_vm_stack_free_args_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_vm_stack_free_args_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_vm_stack_free_args_helper)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 10364 "/home/jakub/prog/php/83/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, 6326, offsetof(zend_execute_data, This.u1.type_info) + 3, (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS >> 24)); -#line 10369 "/home/jakub/prog/php/83/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, 6338, offsetof(zend_execute_data, extra_named_params)); - if (MAY_USE_32BIT_ADDR(zend_free_extra_named_params)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_free_extra_named_params)); - } else { - if (IS_SIGNED_32BIT(zend_free_extra_named_params)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_free_extra_named_params)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_free_extra_named_params)), (unsigned int)((((ptrdiff_t)zend_free_extra_named_params))>>32)); - } - dasm_put(Dst, 66); - } -#line 10372 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >2 - //|.code - dasm_put(Dst, 2938); -#line 10374 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 10375 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|8: - dasm_put(Dst, 4331); -#line 10378 "/home/jakub/prog/php/83/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, 6326, offsetof(zend_execute_data, This.u1.type_info) + 2, (ZEND_CALL_RELEASE_THIS >> 16)); -#line 10384 "/home/jakub/prog/php/83/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, 6345, offsetof(zend_execute_data, This), (ZREG_FCARG1), 0); - if (ZREG_FCARG1 != ZREG_FCARG1) { - dasm_put(Dst, 2349, (ZREG_FCARG1)); - } - if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - dasm_put(Dst, 6364, (ZREG_FCARG1), (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (ZREG_FCARG1 != ZREG_FCARG1) { - dasm_put(Dst, 2349, (ZREG_FCARG1)); - } - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } -#line 10388 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >2 - //|.code - dasm_put(Dst, 6383); -#line 10390 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 10391 "/home/jakub/prog/php/83/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, 6326, offsetof(zend_execute_data, This.u1.type_info) + 2, (ZEND_CALL_ALLOCATED >> 16)); -#line 10405 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| mov FCARG1a, RX - //| EXT_CALL zend_jit_free_call_frame, r0 - dasm_put(Dst, 6391); - if (MAY_USE_32BIT_ADDR(zend_jit_free_call_frame)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_free_call_frame)); - } else { - if (IS_SIGNED_32BIT(zend_jit_free_call_frame)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_free_call_frame)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_free_call_frame)), (unsigned int)((((ptrdiff_t)zend_jit_free_call_frame))>>32)); - } - dasm_put(Dst, 66); - } -#line 10408 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >1 - //|.code - dasm_put(Dst, 3817); -#line 10410 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| MEM_STORE_ZTS aword, executor_globals, vm_stack_top, RX, r0 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 10412 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 615, (executor_globals_offset+offsetof(zend_executor_globals, vm_stack_top))); -#line 10413 "/home/jakub/prog/php/83/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, 263, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); - dasm_put(Dst, 70); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((func_info) & MAY_BE_GUARD) - && has_concrete_type((func_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } -#line 10427 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - //| // if (UNEXPECTED(EG(exception) != NULL)) { - //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 10432 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne ->icall_throw_handler - dasm_put(Dst, 6398, (executor_globals_offset+offsetof(zend_executor_globals, exception))); -#line 10433 "/home/jakub/prog/php/83/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, 1569, ((ptrdiff_t)(opline + 1))); - } else { - dasm_put(Dst, 1574, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32)); - } - } else { - if (IS_SIGNED_32BIT((opline + 1))) { - dasm_put(Dst, 313, Dt1(->opline), ((ptrdiff_t)(opline + 1))); - } else { - dasm_put(Dst, 1579, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32), Dt1(->opline)); - } - } -#line 10451 "/home/jakub/prog/php/83/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, 1569, ((ptrdiff_t)(opline + 1))); - } else { - dasm_put(Dst, 1574, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32)); - } - } else { - if (IS_SIGNED_32BIT((opline + 1))) { - dasm_put(Dst, 313, Dt1(->opline), ((ptrdiff_t)(opline + 1))); - } else { - dasm_put(Dst, 1579, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32), Dt1(->opline)); - } - } -#line 10455 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - if (!func) { - //|9: - dasm_put(Dst, 4230); -#line 10460 "/home/jakub/prog/php/83/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, 6026, Dt1(->func), offsetof(zend_function, quick_arg_flags), mask, (ptrdiff_t)(exit_addr)); -#line 10498 "/home/jakub/prog/php/83/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, 6408, Dt1(->func), offsetof(zend_function, quick_arg_flags), mask); -#line 10503 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 10504 "/home/jakub/prog/php/83/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, 1684, (Z_REG(addr)), Z_OFFSET(addr)+offsetof(zval,u1.type_info), IS_UNDEF); -#line 10508 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 10510 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->throw_cannot_pass_by_ref - //|.code - dasm_put(Dst, 6423); -#line 10512 "/home/jakub/prog/php/83/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, 2735, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } - } else if (!IS_SIGNED_32BIT(zv)) { - dasm_put(Dst, 1768, (ZREG_R0), (unsigned int)(((uintptr_t)zv)), (unsigned int)((((uintptr_t)zv))>>32)); - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); - } else { - dasm_put(Dst, 2028, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); - } - } else { - if (CAN_USE_AVX()) { - dasm_put(Dst, 1978, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); - } else { - dasm_put(Dst, 1988, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (dst_reg-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 2735, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { - dasm_put(Dst, 1768, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); - } else { - dasm_put(Dst, 1775, (ZREG_R0), Z_LVAL_P(zv)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (dst_reg-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1760, (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, 1768, (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, 1768, (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, 1782, (ZREG_R0), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } - } - } else { - if (Z_MODE(arg_addr) == IS_REG) { - dasm_put(Dst, 1775, (Z_REG(arg_addr)), Z_LVAL_P(zv)); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 3894, (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, 1684, (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<>32)); - } else { - dasm_put(Dst, 3918, Z_LVAL_P(zv)); - } -#line 10524 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_addr)), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(arg_addr)), (Z_REG(arg_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(arg_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(arg_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(arg_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); - } -#line 10527 "/home/jakub/prog/php/83/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, 6437, Dt1(->call), offsetof(zend_execute_data, This.u1.type_info) + 3, (ZEND_CALL_MAY_HAVE_UNDEF >> 24)); -#line 10538 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 70); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 10540 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_handle_undef_args)); - } else { - if (IS_SIGNED_32BIT(zend_handle_undef_args)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_handle_undef_args)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_handle_undef_args)), (unsigned int)((((ptrdiff_t)zend_handle_undef_args))>>32)); - } - dasm_put(Dst, 66); - } -#line 10541 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| test r0, r0 - //| jnz ->exception_handler - //| jmp >2 - //|.code - dasm_put(Dst, 6452); -#line 10545 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 10546 "/home/jakub/prog/php/83/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, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (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, 6465, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 6473, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 10564 "/home/jakub/prog/php/83/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, 6479, offsetof(zval, u1.v.type), IS_INDIRECT); -#line 10569 "/home/jakub/prog/php/83/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 10575 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO op1_addr, IS_NULL - dasm_put(Dst, 336, (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 10576 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >2 - //|1: - dasm_put(Dst, 6493, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_NULL); -#line 10578 "/home/jakub/prog/php/83/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 10589 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GET_ZVAL_PTR r1, op1_addr - dasm_put(Dst, 2252, (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 10590 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GC_ADDREF r1 - //| SET_ZVAL_PTR arg_addr, r1 - dasm_put(Dst, 6508, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); -#line 10592 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO arg_addr, IS_REFERENCE_EX - dasm_put(Dst, 6519, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); -#line 10593 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >6 - dasm_put(Dst, 6527, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), IS_REFERENCE_EX); -#line 10594 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|2: - //| // ZVAL_NEW_REF(arg, varptr); - dasm_put(Dst, 2065); -#line 10597 "/home/jakub/prog/php/83/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, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (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, 6465, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 6473, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 10600 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| mov aword T1, r0 // save - dasm_put(Dst, 3547); -#line 10602 "/home/jakub/prog/php/83/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, 798, sizeof(zend_reference)); - if (IS_SIGNED_32BIT(filename)) { - dasm_put(Dst, 751, ((ptrdiff_t)filename)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)filename)), (unsigned int)((((ptrdiff_t)filename))>>32)); - } - dasm_put(Dst, 6540, opline->lineno); - if (MAY_USE_32BIT_ADDR(_emalloc)) { - dasm_put(Dst, 53, (ptrdiff_t)(_emalloc)); - } else { - if (IS_SIGNED_32BIT(_emalloc)) { - dasm_put(Dst, 56, ((ptrdiff_t)_emalloc)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_emalloc)), (unsigned int)((((ptrdiff_t)_emalloc))>>32)); - } - dasm_put(Dst, 66); - } - #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, 53, (ptrdiff_t)(_emalloc_32)); - } else { - if (IS_SIGNED_32BIT(_emalloc_32)) { - dasm_put(Dst, 56, ((ptrdiff_t)_emalloc_32)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_emalloc_32)), (unsigned int)((((ptrdiff_t)_emalloc_32))>>32)); - } - dasm_put(Dst, 66); - } - } else { - dasm_put(Dst, 798, sizeof(zend_reference)); - if (MAY_USE_32BIT_ADDR(_emalloc)) { - dasm_put(Dst, 53, (ptrdiff_t)(_emalloc)); - } else { - if (IS_SIGNED_32BIT(_emalloc)) { - dasm_put(Dst, 56, ((ptrdiff_t)_emalloc)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_emalloc)), (unsigned int)((((ptrdiff_t)_emalloc))>>32)); - } - dasm_put(Dst, 66); - } - } - #else - dasm_put(Dst, 798, sizeof(zend_reference)); - if (MAY_USE_32BIT_ADDR(_emalloc)) { - dasm_put(Dst, 53, (ptrdiff_t)(_emalloc)); - } else { - if (IS_SIGNED_32BIT(_emalloc)) { - dasm_put(Dst, 56, ((ptrdiff_t)_emalloc)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_emalloc)), (unsigned int)((((ptrdiff_t)_emalloc))>>32)); - } - dasm_put(Dst, 66); - } - #endif - #endif -#line 10604 "/home/jakub/prog/php/83/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, 6549, offsetof(zend_reference, gc.u.type_info), GC_REFERENCE, offsetof(zend_reference, sources.ptr)); -#line 10607 "/home/jakub/prog/php/83/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, 6568); - 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, 1782, (Z_REG(val_addr)), (Z_REG(ref_addr))); - } else { - ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(ref_addr)), (Z_REG(ref_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(ref_addr)), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(val_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(ref_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(ref_addr))); - } else { - ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(ref_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(ref_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(ref_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(ref_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval,u1.type_info)); - } -#line 10613 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_PTR val_addr, r0 - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); -#line 10614 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO val_addr, IS_REFERENCE_EX - dasm_put(Dst, 2312, (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info), IS_REFERENCE_EX); -#line 10615 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_addr)), (Z_REG(ref_addr))); - } else { - ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(ref_addr)), (Z_REG(ref_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(ref_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(ref_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(ref_addr))); - } else { - ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(ref_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(ref_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(ref_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(ref_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R1), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)+offsetof(zval,u1.type_info)); - } -#line 10617 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_PTR op1_addr, r0 - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); -#line 10618 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO op1_addr, IS_REFERENCE_EX - dasm_put(Dst, 2312, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_REFERENCE_EX); -#line 10619 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| SET_ZVAL_PTR arg_addr, r0 - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); -#line 10621 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO arg_addr, IS_REFERENCE_EX - dasm_put(Dst, 2312, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), IS_REFERENCE_EX); -#line 10622 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|6: - //| FREE_OP opline->op1_type, opline->op1, op1_info, !cold, opline - dasm_put(Dst, 3411); - 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 10626 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|7: - dasm_put(Dst, 4482); -#line 10627 "/home/jakub/prog/php/83/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, 6408, Dt1(->func), offsetof(zend_function, quick_arg_flags), mask); -#line 10664 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 10665 "/home/jakub/prog/php/83/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, 6573); -#line 10670 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_addr)), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(arg_addr)), (Z_REG(arg_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(arg_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(arg_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(arg_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R1), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); - } -#line 10679 "/home/jakub/prog/php/83/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, 6579, IS_REFERENCE, (ptrdiff_t)(exit_addr)); -#line 10692 "/home/jakub/prog/php/83/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, 6408, Dt1(->func), offsetof(zend_function, quick_arg_flags), mask); -#line 10703 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 10704 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_addr)), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(arg_addr)), (Z_REG(arg_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(arg_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(arg_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(arg_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R1), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); - } -#line 10708 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (op1_info & MAY_BE_REF) { - //| cmp cl, IS_REFERENCE - //| je >7 - dasm_put(Dst, 6587, IS_REFERENCE); -#line 10711 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| test dword [r0 + offsetof(zend_function, quick_arg_flags)], mask - //| jnz >7 - dasm_put(Dst, 6596, offsetof(zend_function, quick_arg_flags), mask); -#line 10714 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 10721 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 10723 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(arg_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(arg_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 10724 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_only_vars_by_reference)); - } else { - if (IS_SIGNED_32BIT(zend_jit_only_vars_by_reference)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_only_vars_by_reference)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_only_vars_by_reference)), (unsigned int)((((ptrdiff_t)zend_jit_only_vars_by_reference))>>32)); - } - dasm_put(Dst, 66); - } -#line 10725 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (!zend_jit_check_exception(Dst)) { - return 0; - } - //| jmp >7 - dasm_put(Dst, 3757); -#line 10729 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|.code - dasm_put(Dst, 373); -#line 10732 "/home/jakub/prog/php/83/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, 6606, offsetof(zend_execute_data, This.u1.type_info), ZEND_CALL_SEND_ARG_BY_REF); -#line 10748 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 10749 "/home/jakub/prog/php/83/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, 6573); -#line 10754 "/home/jakub/prog/php/83/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 10760 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 3945, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); -#line 10761 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 10762 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 10765 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1d, opline->op1.var - //| EXT_CALL zend_jit_undefined_op_helper, r0 - dasm_put(Dst, 2338, opline->op1.var); - if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 10767 "/home/jakub/prog/php/83/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 10768 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| test r0, r0 - //| jz ->exception_handler - dasm_put(Dst, 6618, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info), IS_NULL); -#line 10770 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - - if (op1_info & (MAY_BE_ANY|MAY_BE_REF)) { - //| jmp >7 - //|.code - dasm_put(Dst, 6573); -#line 10774 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //|7: - dasm_put(Dst, 4482); -#line 10776 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_addr)), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(arg_addr)), (Z_REG(arg_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(arg_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(arg_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(arg_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R1), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); - } -#line 10782 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (op1_info & MAY_BE_REF) { - //| cmp cl, IS_REFERENCE - //| je >7 - dasm_put(Dst, 6587, IS_REFERENCE); -#line 10785 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 10793 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 10795 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(arg_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(arg_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 10796 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_only_vars_by_reference)); - } else { - if (IS_SIGNED_32BIT(zend_jit_only_vars_by_reference)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_only_vars_by_reference)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_only_vars_by_reference)), (unsigned int)((((ptrdiff_t)zend_jit_only_vars_by_reference))>>32)); - } - dasm_put(Dst, 66); - } -#line 10797 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 10807 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| ZVAL_DEREF FCARG1a, op1_info - if (op1_info & MAY_BE_REF) { - dasm_put(Dst, 5322, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 10808 "/home/jakub/prog/php/83/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, 1782, (Z_REG(val_addr)), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(arg_addr)), (Z_REG(arg_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(val_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(arg_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(arg_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(arg_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); - } -#line 10809 "/home/jakub/prog/php/83/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, 2408); - } - dasm_put(Dst, 2233); - } -#line 10810 "/home/jakub/prog/php/83/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 10814 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 3945, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); -#line 10815 "/home/jakub/prog/php/83/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, 70); - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); -#line 10818 "/home/jakub/prog/php/83/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, 4245, (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, 1782, (Z_REG(ref_addr)), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(arg_addr)), (Z_REG(arg_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(ref_addr))); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(ref_addr))); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(ref_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(arg_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(ref_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(ref_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(ref_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(arg_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(arg_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(ref_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); - } -#line 10820 "/home/jakub/prog/php/83/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, 6634); - #if ZEND_DEBUG - dasm_put(Dst, 4094); - if (MAY_USE_32BIT_ADDR(_efree)) { - dasm_put(Dst, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - #else - #ifdef HAVE_BUILTIN_CONSTANT_P - if (MAY_USE_32BIT_ADDR(_efree_32)) { - dasm_put(Dst, 53, (ptrdiff_t)(_efree_32)); - } else { - if (IS_SIGNED_32BIT(_efree_32)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree_32)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree_32)), (unsigned int)((((ptrdiff_t)_efree_32))>>32)); - } - dasm_put(Dst, 66); - } - #else - if (MAY_USE_32BIT_ADDR(_efree)) { - dasm_put(Dst, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - #endif - #endif -#line 10827 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >2 - //|.code - dasm_put(Dst, 2938); -#line 10829 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_addr)), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(arg_addr)), (Z_REG(arg_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(arg_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(arg_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(arg_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); - } -#line 10830 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 10831 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_addr)), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(arg_addr)), (Z_REG(arg_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(arg_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(arg_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(arg_addr))); - } else { - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(arg_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(arg_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(arg_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(arg_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(arg_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(arg_addr)), Z_OFFSET(arg_addr)+offsetof(zval,u1.type_info)); - } -#line 10842 "/home/jakub/prog/php/83/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, 2408); - } - dasm_put(Dst, 2233); - } -#line 10844 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - } - //|7: - dasm_put(Dst, 4482); -#line 10848 "/home/jakub/prog/php/83/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, 5745, offsetof(zend_execute_data, This.u1.type_info), ZEND_CALL_SEND_ARG_BY_REF); - } else { -#line 10867 "/home/jakub/prog/php/83/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, 6657, Dt1(->call), offsetof(zend_execute_data, This.u1.type_info), ZEND_CALL_SEND_ARG_BY_REF); - } -#line 10870 "/home/jakub/prog/php/83/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, 6666, offsetof(zend_execute_data, This.u1.type_info), ~ZEND_CALL_SEND_ARG_BY_REF); - } else { -#line 10878 "/home/jakub/prog/php/83/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, 6672, Dt1(->call), offsetof(zend_execute_data, This.u1.type_info), ~ZEND_CALL_SEND_ARG_BY_REF); - } -#line 10881 "/home/jakub/prog/php/83/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, 6408, Dt1(->func), offsetof(zend_function, quick_arg_flags), mask); -#line 10895 "/home/jakub/prog/php/83/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, 6681, offsetof(zend_execute_data, This.u1.type_info), ZEND_CALL_SEND_ARG_BY_REF); -#line 10900 "/home/jakub/prog/php/83/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, 6694, offsetof(zend_execute_data, This.u1.type_info), ~ZEND_CALL_SEND_ARG_BY_REF); -#line 10903 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - return 1; -} - -static int zend_jit_smart_true(dasm_State **Dst, const zend_op *opline, int jmp, uint8_t 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, 3757); -#line 10914 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (smart_branch_opcode == ZEND_JMPNZ) { - //| jmp =>target_label - dasm_put(Dst, 1614, target_label); -#line 10917 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 10924 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (jmp) { - //| jmp >7 - dasm_put(Dst, 3757); -#line 10926 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - return 1; -} - -static int zend_jit_smart_false(dasm_State **Dst, const zend_op *opline, int jmp, uint8_t smart_branch_opcode, uint32_t target_label) -{ - if (smart_branch_opcode) { - if (smart_branch_opcode == ZEND_JMPZ) { - //| jmp =>target_label - dasm_put(Dst, 1614, target_label); -#line 10937 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (smart_branch_opcode == ZEND_JMPNZ) { - if (jmp) { - //| jmp >7 - dasm_put(Dst, 3757); -#line 10940 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 10948 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (jmp) { - //| jmp >7 - dasm_put(Dst, 3757); -#line 10950 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - return 1; -} - -static int zend_jit_defined(dasm_State **Dst, const zend_op *opline, uint8_t 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, 6702, Dt1(->run_time_cache), opline->extended_value); -#line 10981 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|4: - //| MEM_LOAD_ZTS FCARG1a, aword, executor_globals, zend_constants, FCARG1a - dasm_put(Dst, 6729); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 5207, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 5213, tsrm_tls_index, tsrm_tls_offset); - } -#line 10983 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| shr r0, 1 - //| cmp dword [FCARG1a + offsetof(HashTable, nNumOfElements)], eax - dasm_put(Dst, 6733, (executor_globals_offset+offsetof(zend_executor_globals, zend_constants)), offsetof(HashTable, nNumOfElements)); -#line 10985 "/home/jakub/prog/php/83/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, 1795, (ptrdiff_t)(exit_addr)); -#line 10990 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jz >3 - dasm_put(Dst, 4027); -#line 10992 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (undefined_label != (uint32_t)-1) { - //| jz =>undefined_label - dasm_put(Dst, 4700, undefined_label); -#line 10995 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jz >3 - dasm_put(Dst, 4027); -#line 10997 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| jz >2 - dasm_put(Dst, 2050); -#line 11000 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|1: - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 70); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 11003 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| LOAD_ADDR FCARG1a, zv - if (IS_SIGNED_32BIT(zv)) { - dasm_put(Dst, 798, ((ptrdiff_t)zv)); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)zv)), (unsigned int)((((ptrdiff_t)zv))>>32)); - } -#line 11004 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_check_constant)); - } else { - if (IS_SIGNED_32BIT(zend_jit_check_constant)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_check_constant)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_check_constant)), (unsigned int)((((ptrdiff_t)zend_jit_check_constant))>>32)); - } - dasm_put(Dst, 66); - } -#line 11005 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| test r0, r0 - dasm_put(Dst, 3655); -#line 11006 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (exit_addr) { - if (smart_branch_opcode == ZEND_JMPNZ) { - //| jz >3 - dasm_put(Dst, 4027); -#line 11009 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jnz >3 - dasm_put(Dst, 303); -#line 11011 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jmp &exit_addr - dasm_put(Dst, 146, (ptrdiff_t)(exit_addr)); -#line 11013 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (smart_branch_opcode) { - if (undefined_label != (uint32_t)-1) { - //| jz =>undefined_label - dasm_put(Dst, 4700, undefined_label); -#line 11016 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jz >3 - dasm_put(Dst, 4027); -#line 11018 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (defined_label != (uint32_t)-1) { - //| jmp =>defined_label - dasm_put(Dst, 1614, defined_label); -#line 11021 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >3 - dasm_put(Dst, 3991); -#line 11023 "/home/jakub/prog/php/83/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, 6744); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 11029 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >3 - dasm_put(Dst, 6751, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 11030 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.code - dasm_put(Dst, 373); -#line 11032 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 11036 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (defined_label != (uint32_t)-1) { - //| jmp =>defined_label - dasm_put(Dst, 1614, defined_label); -#line 11039 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //|1: - //| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE - dasm_put(Dst, 70); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 11043 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|3: - dasm_put(Dst, 333); -#line 11045 "/home/jakub/prog/php/83/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, uint8_t 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 11060 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 3945, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); -#line 11061 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 11062 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 11064 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1d, opline->op1.var - //| EXT_CALL zend_jit_undefined_op_helper, r0 - dasm_put(Dst, 2338, opline->op1.var); - if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 11066 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 11071 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if ((op1_info & (MAY_BE_ANY|MAY_BE_REF)) != 0) { - //| jmp >7 - dasm_put(Dst, 3757); -#line 11073 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 11081 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if ((op1_info & (MAY_BE_ANY|MAY_BE_REF)) != 0) { - //| jmp >7 - dasm_put(Dst, 3757); -#line 11083 "/home/jakub/prog/php/83/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, 373); -#line 11090 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 11097 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (exit_addr) { - if (smart_branch_opcode == ZEND_JMPNZ) { - //| jmp &exit_addr - dasm_put(Dst, 146, (ptrdiff_t)(exit_addr)); -#line 11100 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 11106 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (exit_addr) { - if (smart_branch_opcode == ZEND_JMPZ) { - //| jmp &exit_addr - dasm_put(Dst, 146, (ptrdiff_t)(exit_addr)); -#line 11109 "/home/jakub/prog/php/83/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; - uint8_t 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, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (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, 6465, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 6473, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 11141 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| ZVAL_DEREF r0, op1_info - if (op1_info & MAY_BE_REF) { - dasm_put(Dst, 3837, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 11142 "/home/jakub/prog/php/83/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 11150 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 263, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); -#line 11151 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 11152 "/home/jakub/prog/php/83/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 11155 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GC_DELREF FCARG1a - dasm_put(Dst, 292, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 11156 "/home/jakub/prog/php/83/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, 303); -#line 11159 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (op1_info & MAY_BE_REF) { - //| mov al, byte [r0 + 8] - dasm_put(Dst, 6764, 8); -#line 11162 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov al, byte [FP + opline->op1.var + 8] - dasm_put(Dst, 6768, opline->op1.var + 8); -#line 11164 "/home/jakub/prog/php/83/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, 6773); - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } while(0); -#line 11168 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov cl, byte T1 // restore - //|jmp >2 - dasm_put(Dst, 6777); -#line 11170 "/home/jakub/prog/php/83/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, 3991); -#line 11174 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.code - dasm_put(Dst, 373); -#line 11176 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|3: - dasm_put(Dst, 333); -#line 11178 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (op1_info & MAY_BE_REF) { - //| mov cl, byte [r0 + 8] - dasm_put(Dst, 6785, 8); -#line 11180 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov cl, byte [FP + opline->op1.var + 8] - dasm_put(Dst, 6789, opline->op1.var + 8); -#line 11182 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|2: - dasm_put(Dst, 2065); -#line 11184 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - if (op1_info & MAY_BE_REF) { - //| mov cl, byte [r0 + 8] - dasm_put(Dst, 6785, 8); -#line 11187 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov cl, byte [FP + opline->op1.var + 8] - dasm_put(Dst, 6789, opline->op1.var + 8); -#line 11189 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - //| mov eax, 1 - //| shl eax, cl - //| test eax, mask - dasm_put(Dst, 6794, mask); -#line 11194 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (exit_addr) { - if (smart_branch_opcode == ZEND_JMPNZ) { - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 11197 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| je &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 11199 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (smart_branch_opcode) { - if (smart_branch_opcode == ZEND_JMPZ) { - //| je =>target_label - dasm_put(Dst, 4700, target_label); -#line 11203 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (smart_branch_opcode == ZEND_JMPNZ) { - //| jne =>target_label - dasm_put(Dst, 1908, target_label); -#line 11205 "/home/jakub/prog/php/83/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, 6804); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 11215 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline - dasm_put(Dst, 4692, (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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 11216 "/home/jakub/prog/php/83/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 11224 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 263, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); -#line 11225 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 11226 "/home/jakub/prog/php/83/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 11229 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GC_DELREF FCARG1a - dasm_put(Dst, 292, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 11230 "/home/jakub/prog/php/83/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, 303); -#line 11233 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (op1_info & MAY_BE_REF) { - //| mov al, byte [r0 + 8] - dasm_put(Dst, 6764, 8); -#line 11236 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov al, byte [FP + opline->op1.var + 8] - dasm_put(Dst, 6768, opline->op1.var + 8); -#line 11238 "/home/jakub/prog/php/83/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, 6773); - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } while(0); -#line 11242 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov cl, byte T1 // restore - //|jmp >2 - dasm_put(Dst, 6777); -#line 11244 "/home/jakub/prog/php/83/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, 3991); -#line 11248 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.code - dasm_put(Dst, 373); -#line 11250 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|3: - dasm_put(Dst, 333); -#line 11252 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (op1_info & MAY_BE_REF) { - //| mov cl, byte [r0 + 8] - dasm_put(Dst, 6785, 8); -#line 11254 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov cl, byte [FP + opline->op1.var + 8] - dasm_put(Dst, 6789, opline->op1.var + 8); -#line 11256 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|2: - //| cmp cl, type - dasm_put(Dst, 6814, type); -#line 11259 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - if (op1_info & MAY_BE_REF) { - //| cmp byte [r0 + 8], type - dasm_put(Dst, 3855, 8, type); -#line 11262 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| cmp byte [FP + opline->op1.var + 8], type - dasm_put(Dst, 6821, opline->op1.var + 8, type); -#line 11264 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - if (exit_addr) { - if (invert) { - if (smart_branch_opcode == ZEND_JMPNZ) { - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 11270 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| je &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 11272 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - if (smart_branch_opcode == ZEND_JMPNZ) { - //| je &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 11276 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 11278 "/home/jakub/prog/php/83/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, 4700, target_label); -#line 11284 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (smart_branch_opcode == ZEND_JMPNZ) { - //| jne =>target_label - dasm_put(Dst, 1908, target_label); -#line 11286 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - ZEND_UNREACHABLE(); - } - } else { - if (smart_branch_opcode == ZEND_JMPZ) { - //| jne =>target_label - dasm_put(Dst, 1908, target_label); -#line 11292 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (smart_branch_opcode == ZEND_JMPNZ) { - //| je =>target_label - dasm_put(Dst, 4700, target_label); -#line 11294 "/home/jakub/prog/php/83/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, 4665); -#line 11303 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| sete al - dasm_put(Dst, 4661); -#line 11305 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| movzx eax, al - //| add eax, 2 - //| SET_ZVAL_TYPE_INFO res_addr, eax - dasm_put(Dst, 4728); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 11309 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline - dasm_put(Dst, 4692, (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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 11310 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - } - } - - //|7: - dasm_put(Dst, 4482); -#line 11316 "/home/jakub/prog/php/83/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, 6827, Dt1(->prev_execute_data)); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 5632, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 5638, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 6833, (executor_globals_offset+offsetof(zend_executor_globals, current_execute_data))); -#line 11325 "/home/jakub/prog/php/83/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, 6838, Dt1(->prev_execute_data)); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 11333 "/home/jakub/prog/php/83/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, 6844, (executor_globals_offset+offsetof(zend_executor_globals, current_execute_data))); - if (MAY_USE_32BIT_ADDR(zend_free_compiled_variables)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_free_compiled_variables)); - } else { - if (IS_SIGNED_32BIT(zend_free_compiled_variables)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_free_compiled_variables)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_free_compiled_variables)), (unsigned int)((((ptrdiff_t)zend_free_compiled_variables))>>32)); - } - dasm_put(Dst, 66); - } -#line 11336 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, offset)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((info) & MAY_BE_GUARD) - && has_concrete_type((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } -#line 11344 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((info) & MAY_BE_GUARD) - && has_concrete_type((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } -#line 11352 "/home/jakub/prog/php/83/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, 458, offsetof(zend_execute_data, This.u1.type_info)); -#line 11389 "/home/jakub/prog/php/83/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, 6853, (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 11400 "/home/jakub/prog/php/83/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, 6858, 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 11402 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (trace && trace->op != ZEND_JIT_TRACE_END) { - //| jnz >1 - //|.cold_code - dasm_put(Dst, 272); -#line 11406 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 11407 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (!GCC_GLOBAL_REGS) { - //| mov FCARG1a, FP - dasm_put(Dst, 73); -#line 11409 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_leave_func_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_leave_func_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_leave_func_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_leave_func_helper)), (unsigned int)((((ptrdiff_t)zend_jit_leave_func_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 11411 "/home/jakub/prog/php/83/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, 1846, zend_jit_halt_op); -#line 11419 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" -#endif - } else if (GCC_GLOBAL_REGS) { - //| test IP, IP - //| je ->trace_halt - dasm_put(Dst, 1856); -#line 11423 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| test eax, eax - //| jl ->trace_halt - dasm_put(Dst, 1865); -#line 11426 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 92, (executor_globals_offset+offsetof(zend_executor_globals, current_execute_data))); -#line 11432 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jmp >8 - //|.code - dasm_put(Dst, 6865); -#line 11435 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jnz ->leave_function_handler - dasm_put(Dst, 6871); -#line 11437 "/home/jakub/prog/php/83/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, 6876, Dt1(->func), sizeof(zend_object), (ZREG_FCARG1), 0); - if (ZREG_FCARG1 != ZREG_FCARG1) { - dasm_put(Dst, 2349, (ZREG_FCARG1)); - } - if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - dasm_put(Dst, 6898, (ZREG_FCARG1), (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (ZREG_FCARG1 != ZREG_FCARG1) { - dasm_put(Dst, 2349, (ZREG_FCARG1)); - } - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } -#line 11451 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|4: - dasm_put(Dst, 6917); -#line 11452 "/home/jakub/prog/php/83/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, 6922, ZEND_CALL_RELEASE_THIS); -#line 11463 "/home/jakub/prog/php/83/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, 6931, Dt1(->This.value.obj), (ZREG_FCARG1), 0); - if (ZREG_FCARG1 != ZREG_FCARG1) { - dasm_put(Dst, 2349, (ZREG_FCARG1)); - } - if (MAY_USE_32BIT_ADDR(zend_objects_store_del)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - dasm_put(Dst, 6898, (ZREG_FCARG1), (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (ZREG_FCARG1 != ZREG_FCARG1) { - dasm_put(Dst, 2349, (ZREG_FCARG1)); - } - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } -#line 11468 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|4: - dasm_put(Dst, 6917); -#line 11469 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 11475 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| // execute_data = EX(prev_execute_data); - //| mov FP, EX->prev_execute_data - dasm_put(Dst, 6948, (executor_globals_offset+offsetof(zend_executor_globals, vm_stack_top)), Dt1(->prev_execute_data)); -#line 11477 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } - dasm_put(Dst, 6321, (executor_globals_offset+offsetof(zend_executor_globals, current_execute_data))); -#line 11481 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|9: - dasm_put(Dst, 4230); -#line 11484 "/home/jakub/prog/php/83/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 11490 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| ADD_IP sizeof(zend_op) - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 1558, sizeof(zend_op)); - } else { - dasm_put(Dst, 1563, Dt1(->opline), sizeof(zend_op)); - } -#line 11491 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|8: - dasm_put(Dst, 4331); -#line 11494 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 11505 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne ->leave_throw_handler - dasm_put(Dst, 6957, (executor_globals_offset+offsetof(zend_executor_globals, exception))); -#line 11506 "/home/jakub/prog/php/83/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, 1877, next_opline); - } else { - dasm_put(Dst, 1883, Dt1(->opline), next_opline); - } -#line 11518 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| je =>0 // LOOP - dasm_put(Dst, 4700, 0); -#line 11519 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" -#ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 11521 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" -#else - //| jmp ->trace_escape - dasm_put(Dst, 1707); -#line 11523 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" -#endif - } else { - //| CMP_IP next_opline - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 1877, next_opline); - } else { - dasm_put(Dst, 1883, Dt1(->opline), next_opline); - } -#line 11526 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne ->trace_escape - dasm_put(Dst, 6967); -#line 11527 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 11539 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne ->leave_throw_handler - dasm_put(Dst, 6957, (executor_globals_offset+offsetof(zend_executor_globals, exception))); -#line 11540 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - return 1; - } else { - //| // if (EG(exception)) - //| MEM_CMP_ZTS aword, executor_globals, exception, 0, r0 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 15, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 21, tsrm_tls_index, tsrm_tls_offset); - } -#line 11546 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| LOAD_IP - dasm_put(Dst, 6972, (executor_globals_offset+offsetof(zend_executor_globals, exception))); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 0, Dt1(->opline)); - } -#line 11547 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne ->leave_throw_handler - //| // opline = EX(opline) + 1 - //| ADD_IP sizeof(zend_op) - dasm_put(Dst, 6962); - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 1558, sizeof(zend_op)); - } else { - dasm_put(Dst, 1563, Dt1(->opline), sizeof(zend_op)); - } -#line 11550 "/home/jakub/prog/php/83/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, 97); - #endif -#line 11554 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" -#ifdef CONTEXT_THREADED_JIT - //| push aword [IP] - //| ret - dasm_put(Dst, 6978); -#line 11557 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" -#else - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 11559 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" -#endif - } else if (GCC_GLOBAL_REGS) { - //| add r4, SPAD // stack alignment - dasm_put(Dst, 115); -#line 11562 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" -#ifdef CONTEXT_THREADED_JIT - //| push aword [IP] - //| ret - dasm_put(Dst, 6978); -#line 11565 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" -#else - //| JMP_IP - if (GCC_GLOBAL_REGS) { - dasm_put(Dst, 102); - } else { - dasm_put(Dst, 107, Dt1(->opline)); - } -#line 11567 "/home/jakub/prog/php/83/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, 6984); -#line 11580 "/home/jakub/prog/php/83/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, 575); -#line 11586 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 11622 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1a, FP - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 73); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 11624 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_observer_fcall_end)); - } else { - if (IS_SIGNED_32BIT(zend_observer_fcall_end)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_observer_fcall_end)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_observer_fcall_end)), (unsigned int)((((ptrdiff_t)zend_observer_fcall_end))>>32)); - } - dasm_put(Dst, 66); - } -#line 11625 "/home/jakub/prog/php/83/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, 939, Dt1(->return_value)); -#line 11631 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (return_value_used == -1) { - //| test r2, r2 - dasm_put(Dst, 7010); -#line 11634 "/home/jakub/prog/php/83/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, 5815, Dt1(->return_value)); -#line 11639 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (return_value_used == -1) { - //| test r1, r1 - dasm_put(Dst, 7014); -#line 11642 "/home/jakub/prog/php/83/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, 3598); -#line 11650 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 11651 "/home/jakub/prog/php/83/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, 7018, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED, jit_return_label); -#line 11656 "/home/jakub/prog/php/83/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, 7031, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); -#line 11658 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - //| GET_ZVAL_PTR FCARG1a, op1_addr - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); -#line 11661 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GC_DELREF FCARG1a - dasm_put(Dst, 292, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 11662 "/home/jakub/prog/php/83/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, 1908, jit_return_label); -#line 11666 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jnz >9 - dasm_put(Dst, 5151); -#line 11668 "/home/jakub/prog/php/83/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))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } while(0); -#line 11672 "/home/jakub/prog/php/83/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, 1614, jit_return_label); -#line 11677 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >9 - dasm_put(Dst, 3717); -#line 11679 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.code - dasm_put(Dst, 373); -#line 11681 "/home/jakub/prog/php/83/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, 4700, jit_return_label); -#line 11686 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jz >9 - dasm_put(Dst, 3712); -#line 11688 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - if (return_value_used == 0) { - //|9: - dasm_put(Dst, 4230); -#line 11693 "/home/jakub/prog/php/83/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, 2735, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } - } else if (!IS_SIGNED_32BIT(zv)) { - dasm_put(Dst, 1768, (ZREG_R0), (unsigned int)(((uintptr_t)zv)), (unsigned int)((((uintptr_t)zv))>>32)); - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); - } else { - dasm_put(Dst, 2028, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); - } - } else { - if (CAN_USE_AVX()) { - dasm_put(Dst, 1978, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); - } else { - dasm_put(Dst, 1988, (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, 1933, (Z_REG(ret_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (dst_reg-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } else { - dasm_put(Dst, 1965, (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, 2735, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { - dasm_put(Dst, 1768, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); - } else { - dasm_put(Dst, 1775, (ZREG_R0), Z_LVAL_P(zv)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 1933, (Z_REG(ret_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (dst_reg-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } else { - dasm_put(Dst, 1965, (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, 1760, (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, 1768, (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, 1768, (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, 1782, (ZREG_R0), (Z_REG(ret_addr))); - } else { - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } - } - } else { - if (Z_MODE(ret_addr) == IS_REG) { - dasm_put(Dst, 1775, (Z_REG(ret_addr)), Z_LVAL_P(zv)); - } else { - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 3894, (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, 1684, (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<>32)); - } else { - dasm_put(Dst, 3918, Z_LVAL_P(zv)); - } -#line 11701 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_addr)), (Z_REG(ret_addr))); - } else { - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(ret_addr)), (Z_REG(ret_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(ret_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(ret_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(ret_addr))); - } else { - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(ret_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(ret_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(ret_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info)); - } -#line 11704 "/home/jakub/prog/php/83/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, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (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, 6465, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 6473, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 11707 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| ZVAL_DEREF r0, op1_info - if (op1_info & MAY_BE_REF) { - dasm_put(Dst, 3837, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 11708 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_addr)), (Z_REG(ret_addr))); - } else { - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(ret_addr)), (Z_REG(ret_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(ret_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(ret_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(ret_addr))); - } else { - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(ret_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(ret_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(ret_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info)); - } -#line 11711 "/home/jakub/prog/php/83/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, 2408); - } - dasm_put(Dst, 2233); - } -#line 11716 "/home/jakub/prog/php/83/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, 1684, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_NULL); -#line 11719 "/home/jakub/prog/php/83/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 11726 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 3945, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); -#line 11727 "/home/jakub/prog/php/83/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, 70); - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); -#line 11730 "/home/jakub/prog/php/83/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, 6009, (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, 1782, (Z_REG(ref_addr)), (Z_REG(ret_addr))); - } else { - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(ret_addr)), (Z_REG(ret_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(ret_addr)), Z_LVAL_P(Z_ZV(ref_addr))); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(ref_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(ref_addr))); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(ref_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(ret_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(ret_addr))); - } else { - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(ref_addr)-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(ref_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(ref_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(ref_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(ret_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(ret_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(ref_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(ref_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(ref_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(ref_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(ref_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(ref_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ref_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(ret_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } else { - ZEND_ASSERT(Z_MODE(ref_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info)); - } -#line 11732 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GC_DELREF r0 - //| je >2 - //| // if (IS_REFCOUNTED()) - dasm_put(Dst, 7045); -#line 11735 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (jit_return_label >= 0) { - //| IF_NOT_REFCOUNTED dh, =>jit_return_label - dasm_put(Dst, 7053, jit_return_label); -#line 11737 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| IF_NOT_REFCOUNTED dh, >9 - dasm_put(Dst, 7060); -#line 11739 "/home/jakub/prog/php/83/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 11742 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GC_ADDREF r2 - dasm_put(Dst, 7068, (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); -#line 11743 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (jit_return_label >= 0) { - //| jmp =>jit_return_label - dasm_put(Dst, 1614, jit_return_label); -#line 11745 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >9 - dasm_put(Dst, 3717); -#line 11747 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|2: - //| EFREE_REFERENCE r0 - dasm_put(Dst, 4400); - #if ZEND_DEBUG - dasm_put(Dst, 4094); - if (MAY_USE_32BIT_ADDR(_efree)) { - dasm_put(Dst, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - #else - #ifdef HAVE_BUILTIN_CONSTANT_P - if (MAY_USE_32BIT_ADDR(_efree_32)) { - dasm_put(Dst, 53, (ptrdiff_t)(_efree_32)); - } else { - if (IS_SIGNED_32BIT(_efree_32)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree_32)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree_32)), (unsigned int)((((ptrdiff_t)_efree_32))>>32)); - } - dasm_put(Dst, 66); - } - #else - if (MAY_USE_32BIT_ADDR(_efree)) { - dasm_put(Dst, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - #endif - #endif -#line 11750 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (jit_return_label >= 0) { - //| jmp =>jit_return_label - dasm_put(Dst, 1614, jit_return_label); -#line 11752 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >9 - dasm_put(Dst, 3717); -#line 11754 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.code - dasm_put(Dst, 373); -#line 11756 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_addr)), (Z_REG(ret_addr))); - } else { - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(ret_addr)), (Z_REG(ret_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(ret_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(ret_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(ret_addr))); - } else { - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(ret_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(ret_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(ret_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(ret_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(ret_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(ret_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(ret_addr)), Z_OFFSET(ret_addr)+offsetof(zval,u1.type_info)); - } -#line 11758 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|9: - dasm_put(Dst, 4230); -#line 11761 "/home/jakub/prog/php/83/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 11770 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GET_ZVAL_W2 r0, val_addr -#line 11772 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.endif - //| GET_ZVAL_PTR r1, val_addr - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); -#line 11774 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.if not(X64) -#line 11776 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GET_ZVAL_W2 r0, val_addr -#line 11778 "/home/jakub/prog/php/83/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, 7079, (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 11791 "/home/jakub/prog/php/83/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, 6519, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 7123, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 11795 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 11898 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| ZVAL_DEREF FCARG1a, op1_info - if (op1_info & MAY_BE_REF) { - dasm_put(Dst, 5322, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 11899 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_ARRAY, (ptrdiff_t)(exit_addr)); -#line 11906 "/home/jakub/prog/php/83/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, 4379, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_ARRAY); -#line 11908 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 11911 "/home/jakub/prog/php/83/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, 276); -#line 11923 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|7: - dasm_put(Dst, 4482); -#line 11924 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING, (ptrdiff_t)(exit_addr)); -#line 11931 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING); -#line 11933 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 11936 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 11937 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG2), (ZREG_FCARG2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op2_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op2_addr))); - } - } - } else if (Z_MODE(op2_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op2_addr)), (ZREG_FCARG2)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 11940 "/home/jakub/prog/php/83/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, 53, (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, 56, ((ptrdiff_t)zend_jit_fetch_dim_str_offset_r_helper)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 11941 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 11943 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_dim_str_r_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_dim_str_r_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_dim_str_r_helper)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 11944 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| SET_ZVAL_PTR res_addr, r0 - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 11946 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO res_addr, IS_STRING - dasm_put(Dst, 2312, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_STRING); -#line 11947 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 11949 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 11951 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_dim_str_is_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_dim_str_is_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_dim_str_is_helper)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 11956 "/home/jakub/prog/php/83/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, 3717); -#line 11963 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|6: - dasm_put(Dst, 3411); -#line 11965 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT, (ptrdiff_t)(exit_addr)); -#line 11972 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT); -#line 11974 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 11977 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 11979 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)(Z_ZV(op2_addr) + 1))); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)(Z_ZV(op2_addr) + 1))), (unsigned int)((((ptrdiff_t)(Z_ZV(op2_addr) + 1)))>>32)); - } -#line 11983 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 11985 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 11988 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_dim_obj_r_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_dim_obj_r_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_dim_obj_r_helper)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 11994 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_dim_obj_is_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_dim_obj_is_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_dim_obj_is_helper)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 11996 "/home/jakub/prog/php/83/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, 3717); -#line 12003 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|6: - dasm_put(Dst, 3411); -#line 12005 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 12011 "/home/jakub/prog/php/83/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 12014 "/home/jakub/prog/php/83/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, 7131, (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, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 12017 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 12018 "/home/jakub/prog/php/83/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 12023 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1d, opline->op2.var - //| EXT_CALL zend_jit_undefined_op_helper, r0 - dasm_put(Dst, 7131, (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, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 12025 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 12026 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(orig_op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(orig_op1_addr)), Z_OFFSET(orig_op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(orig_op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12033 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 12035 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12039 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_invalid_array_access)); - } else { - if (IS_SIGNED_32BIT(zend_jit_invalid_array_access)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_invalid_array_access)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_invalid_array_access)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_array_access))>>32)); - } - dasm_put(Dst, 66); - } -#line 12042 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); -#line 12044 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (op1_info & MAY_BE_ARRAY) { - //| jmp >9 // END - dasm_put(Dst, 3717); -#line 12046 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - if (op1_info & MAY_BE_ARRAY) { - //|.code - dasm_put(Dst, 373); -#line 12051 "/home/jakub/prog/php/83/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, 4331); -#line 12058 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (res_exit_addr) { - uint8_t 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 12066 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 3386, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), type); -#line 12067 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| IF_NOT_ZVAL_TYPE val_addr, IS_REFERENCE, &res_exit_addr - dasm_put(Dst, 70); - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); -#line 12069 "/home/jakub/prog/php/83/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, 7146, (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 12072 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp &res_exit_addr - //|.code - dasm_put(Dst, 7165, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), type, (ptrdiff_t)(res_exit_addr)); -#line 12074 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 12075 "/home/jakub/prog/php/83/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 12077 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| IF_NOT_TYPE dl, type, >1 - //|.cold_code - dasm_put(Dst, 7182, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info), type); -#line 12079 "/home/jakub/prog/php/83/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, 7199, IS_REFERENCE, (ptrdiff_t)(res_exit_addr), offsetof(zend_reference, val)); - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); -#line 12084 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| IF_TYPE dl, type, >1 - //| jmp &res_exit_addr - //|.code - dasm_put(Dst, 7216, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info), type, (ptrdiff_t)(res_exit_addr)); -#line 12087 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 12088 "/home/jakub/prog/php/83/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, 3837, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 12092 "/home/jakub/prog/php/83/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, 5903, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), type, (ptrdiff_t)(res_exit_addr)); -#line 12095 "/home/jakub/prog/php/83/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 12097 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| IF_NOT_TYPE dl, type, &res_exit_addr - dasm_put(Dst, 7236, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info), type, (ptrdiff_t)(res_exit_addr)); -#line 12098 "/home/jakub/prog/php/83/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, 4482); - 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, 1782, (Z_REG(val_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R1), (ZREG_R1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R1), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(val_addr)), (ZREG_R1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R1), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } - } -#line 12104 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); -#line 12110 "/home/jakub/prog/php/83/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, 7123, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 12113 "/home/jakub/prog/php/83/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, 4107); - } - dasm_put(Dst, 2199); - } -#line 12115 "/home/jakub/prog/php/83/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, 2205, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info)); -#line 12123 "/home/jakub/prog/php/83/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, 1782, (Z_REG(val_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(val_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(res_info); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 12129 "/home/jakub/prog/php/83/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, 2225); - } - dasm_put(Dst, 2233); - } -#line 12130 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - //|9: // END - dasm_put(Dst, 4230); -#line 12133 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 12146 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 12153 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 12180 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12184 "/home/jakub/prog/php/83/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, 4334, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val) + offsetof(zval, u1.v.type), IS_ARRAY, offsetof(zend_reference, val)); -#line 12190 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 12191 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 12193 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_prepare_assign_dim_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_prepare_assign_dim_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_prepare_assign_dim_ref)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_prepare_assign_dim_ref)), (unsigned int)((((ptrdiff_t)zend_jit_prepare_assign_dim_ref))>>32)); - } - dasm_put(Dst, 66); - } -#line 12195 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| test r0, r0 - //| mov FCARG1a, r0 - //| jne >1 - //| jmp ->exception_handler_undef - //|.code - dasm_put(Dst, 4363); -#line 12200 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 12201 "/home/jakub/prog/php/83/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, 4379, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_ARRAY); -#line 12207 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|3: - //| SEPARATE_ARRAY op1_addr, op1_info, 1 - dasm_put(Dst, 333); - 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, 1760, (ZREG_R0), (ZREG_R0)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R0), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_R0)); - } - } else { - ZEND_UNREACHABLE(); - } - if (RC_MAY_BE_1(op1_info)) { - dasm_put(Dst, 4392); - } - 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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } - } - if (MAY_USE_32BIT_ADDR(zend_jit_zval_array_dup)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_zval_array_dup)); - } else { - if (IS_SIGNED_32BIT(zend_jit_zval_array_dup)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_zval_array_dup)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_zval_array_dup)), (unsigned int)((((ptrdiff_t)zend_jit_zval_array_dup))>>32)); - } - dasm_put(Dst, 66); - } - dasm_put(Dst, 4400); - } else { - if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { - if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { - dasm_put(Dst, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (RC_MAY_BE_1(op1_info)) { - dasm_put(Dst, 4406); - if (1) { - dasm_put(Dst, 4410); - dasm_put(Dst, 70); - } else { - dasm_put(Dst, 3684); - } - } - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4416, (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, 53, (ptrdiff_t)(zend_array_dup)); - } else { - if (IS_SIGNED_32BIT(zend_array_dup)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_dup)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_dup)), (unsigned int)((((ptrdiff_t)zend_array_dup))>>32)); - } - dasm_put(Dst, 66); - } - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4435, (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, 2938); - } - } - dasm_put(Dst, 2065); - } - } else { - if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { - if (Z_LVAL_P(Z_ZV(op1_addr)) == 0) { - dasm_put(Dst, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } - } -#line 12210 "/home/jakub/prog/php/83/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, 276); -#line 12214 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|7: - dasm_put(Dst, 4482); -#line 12215 "/home/jakub/prog/php/83/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 12218 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jg >7 - dasm_put(Dst, 4447, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_NULL); -#line 12219 "/home/jakub/prog/php/83/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, 3552, (Z_REG(op1_addr))); -#line 12222 "/home/jakub/prog/php/83/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, 336, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); -#line 12228 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| mov FCARG1a, opline->op1.var - //| EXT_CALL zend_jit_undefined_op_helper, r0 - dasm_put(Dst, 798, opline->op1.var); - if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 12231 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 12232 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(_zend_new_array_0)); - } else { - if (IS_SIGNED_32BIT(_zend_new_array_0)) { - dasm_put(Dst, 56, ((ptrdiff_t)_zend_new_array_0)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_zend_new_array_0)), (unsigned int)((((ptrdiff_t)_zend_new_array_0))>>32)); - } - dasm_put(Dst, 66); - } -#line 12235 "/home/jakub/prog/php/83/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, 3574, (Z_REG(op1_addr))); -#line 12237 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| SET_ZVAL_LVAL op1_addr, r0 - if (Z_MODE(op1_addr) == IS_REG) { - dasm_put(Dst, 2306, (Z_REG(op1_addr))); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } -#line 12239 "/home/jakub/prog/php/83/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 12240 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1a, r0 - dasm_put(Dst, 4435, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_ARRAY_EX); -#line 12241 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (op1_info & MAY_BE_ARRAY) { - //| jmp >1 - //|.code - dasm_put(Dst, 3817); -#line 12244 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 12245 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_ARRAY)) { - //|6: - dasm_put(Dst, 3411); -#line 12250 "/home/jakub/prog/php/83/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 - dasm_put(Dst, 13); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 4174, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 4180, tsrm_tls_index, tsrm_tls_offset); - } -#line 12254 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL zend_hash_next_index_insert, r0 - dasm_put(Dst, 4460, (executor_globals_offset + offsetof(zend_executor_globals, uninitialized_zval))); - if (MAY_USE_32BIT_ADDR(zend_hash_next_index_insert)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_hash_next_index_insert)); - } else { - if (IS_SIGNED_32BIT(zend_hash_next_index_insert)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_next_index_insert)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_next_index_insert)), (unsigned int)((((ptrdiff_t)zend_hash_next_index_insert))>>32)); - } - dasm_put(Dst, 66); - } -#line 12255 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| // if (UNEXPECTED(!var_ptr)) { - //| test r0, r0 - //| jz >1 - //|.cold_code - dasm_put(Dst, 4465); -#line 12259 "/home/jakub/prog/php/83/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, 70); - if (opline == last_valid_opline) { - zend_jit_use_last_valid_opline(); - dasm_put(Dst, 4474); - } 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 4478); - } -#line 12262 "/home/jakub/prog/php/83/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 12263 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| //ZEND_VM_C_GOTO(assign_dim_op_ret_null); - //| jmp >8 - //|.code - dasm_put(Dst, 7251, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_UNDEF); -#line 12266 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_PTR res_addr, r0 - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 12267 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO res_addr, IS_INDIRECT - dasm_put(Dst, 2312, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_INDIRECT); -#line 12268 "/home/jakub/prog/php/83/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, 4331); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 12296 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO res_addr, IS_INDIRECT - dasm_put(Dst, 2312, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_INDIRECT); -#line 12297 "/home/jakub/prog/php/83/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, 276); -#line 12300 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|9: - //| SET_ZVAL_TYPE_INFO res_addr, IS_NULL - dasm_put(Dst, 4230); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 12302 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >8 - //|.code - dasm_put(Dst, 7251, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); -#line 12304 "/home/jakub/prog/php/83/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, 276); -#line 12312 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|7: - dasm_put(Dst, 4482); -#line 12313 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 12317 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12320 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (opline->op2_type == IS_UNUSED) { - //| xor FCARG2a, FCARG2a - dasm_put(Dst, 2390); -#line 12323 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)(Z_ZV(op2_addr) + 1))); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)(Z_ZV(op2_addr) + 1))), (unsigned int)((((ptrdiff_t)(Z_ZV(op2_addr) + 1)))>>32)); - } -#line 12326 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12328 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12331 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_dim_obj_w_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_dim_obj_w_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_dim_obj_w_helper)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 12339 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_dim_obj_rw_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_dim_obj_rw_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_dim_obj_rw_helper)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 12342 "/home/jakub/prog/php/83/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, 6865); -#line 12356 "/home/jakub/prog/php/83/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, 4331); - 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 12373 "/home/jakub/prog/php/83/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, - uint8_t 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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12406 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| ZVAL_DEREF FCARG1a, op1_info - if (op1_info & MAY_BE_REF) { - dasm_put(Dst, 5322, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 12407 "/home/jakub/prog/php/83/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, 4379, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_ARRAY); -#line 12416 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12418 "/home/jakub/prog/php/83/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, 4230); -#line 12435 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - return 1; - } else if (not_found_exit_addr) { - //|8: - dasm_put(Dst, 4331); -#line 12438 "/home/jakub/prog/php/83/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, 276); -#line 12445 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|7: - dasm_put(Dst, 4482); -#line 12446 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 12450 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12452 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)(Z_ZV(op2_addr) + 1))); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)(Z_ZV(op2_addr) + 1))), (unsigned int)((((ptrdiff_t)(Z_ZV(op2_addr) + 1)))>>32)); - } -#line 12456 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op2_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op2_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12458 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_isset_dim_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_isset_dim_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_isset_dim_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_isset_dim_helper)), (unsigned int)((((ptrdiff_t)zend_jit_isset_dim_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 12460 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| test r0, r0 - //| jz >9 - dasm_put(Dst, 7265); -#line 12462 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (op1_info & MAY_BE_ARRAY) { - //| jmp >8 - //|.code - dasm_put(Dst, 6865); -#line 12465 "/home/jakub/prog/php/83/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, 336, (Z_REG(op2_addr)), Z_OFFSET(op2_addr)+offsetof(zval, u1.v.type), IS_UNDEF); -#line 12470 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 12472 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1d, opline->op2.var - //| EXT_CALL zend_jit_undefined_op_helper, r0 - dasm_put(Dst, 2338, opline->op2.var); - if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 12474 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 12475 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (op1_info & MAY_BE_ARRAY) { - //| jmp >9 - //|.code - dasm_put(Dst, 4204); -#line 12479 "/home/jakub/prog/php/83/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, 4331); - 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 12493 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 12495 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 12505 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >8 - dasm_put(Dst, 3802); -#line 12507 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (smart_branch_opcode) { - if (smart_branch_opcode == ZEND_JMPZ) { - //| jmp =>target_label2 - dasm_put(Dst, 1614, target_label2); -#line 12511 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (smart_branch_opcode == ZEND_JMPNZ) { - //| jmp =>target_label - dasm_put(Dst, 1614, target_label); -#line 12513 "/home/jakub/prog/php/83/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 12518 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >8 - dasm_put(Dst, 7273, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 12519 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| NIY // TODO: support for empty() - //ZEND_ASSERT(0); - dasm_put(Dst, 1503); -#line 12522 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - //|9: // not found - //| FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline - dasm_put(Dst, 4230); - 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op2.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op2_info) & MAY_BE_GUARD) - && has_concrete_type((op2_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 12527 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 12529 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(exit_addr)); -#line 12539 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (smart_branch_opcode) { - if (smart_branch_opcode == ZEND_JMPZ) { - //| jmp =>target_label - dasm_put(Dst, 1614, target_label); -#line 12543 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 12549 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| NIY // TODO: support for empty() - //ZEND_ASSERT(0); - dasm_put(Dst, 1503); -#line 12552 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|8: - dasm_put(Dst, 4331); -#line 12555 "/home/jakub/prog/php/83/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, 7286, Dt1(->run_time_cache), opline->extended_value); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 1808, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 1814, tsrm_tls_index, tsrm_tls_offset); - } -#line 12570 "/home/jakub/prog/php/83/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, 7300, (executor_globals_offset+offsetof(zend_executor_globals, symbol_table.nNumUsed))); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 1808, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 1814, tsrm_tls_index, tsrm_tls_offset); - } -#line 12579 "/home/jakub/prog/php/83/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, 7316, (executor_globals_offset+offsetof(zend_executor_globals, symbol_table.arData)), offsetof(zval, u1.v.type), IS_REFERENCE); - if (IS_SIGNED_32BIT(varname)) { - dasm_put(Dst, 5892, offsetof(Bucket, key), ((ptrdiff_t)varname)); - } else { - dasm_put(Dst, 5883, (unsigned int)(((ptrdiff_t)varname)), (unsigned int)((((ptrdiff_t)varname))>>32), offsetof(Bucket, key)); - } -#line 12582 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jne >9 - //| GET_Z_PTR r0, r0 - //| GC_ADDREF r0 - //|1: - dasm_put(Dst, 7329); -#line 12586 "/home/jakub/prog/php/83/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_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 12590 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 7342, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); -#line 12591 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 12592 "/home/jakub/prog/php/83/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 12595 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| // ZVAL_REF(variable_ptr, ref) - //| SET_ZVAL_PTR op1_addr, r0 - dasm_put(Dst, 4245, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); -#line 12597 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO op1_addr, IS_REFERENCE_EX - dasm_put(Dst, 2312, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); -#line 12598 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| // if (GC_DELREF(garbage) == 0) - //| GC_DELREF FCARG1a - dasm_put(Dst, 7357, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_REFERENCE_EX); -#line 12600 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (op1_info & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) { - //| jnz >3 - dasm_put(Dst, 303); -#line 12602 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jnz >5 - dasm_put(Dst, 4308); -#line 12604 "/home/jakub/prog/php/83/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))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } while(0); -#line 12606 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >5 - dasm_put(Dst, 3406); -#line 12607 "/home/jakub/prog/php/83/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, 7369, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 4520, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 4525, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 7381); - } -#line 12612 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >5 - dasm_put(Dst, 3406); -#line 12613 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - //|.code - dasm_put(Dst, 373); -#line 12616 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - - if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (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 12622 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO op1_addr, IS_REFERENCE_EX - dasm_put(Dst, 2312, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.type_info), IS_REFERENCE_EX); -#line 12623 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|5: - dasm_put(Dst, 509); -#line 12625 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //END of handler - - //|.cold_code - dasm_put(Dst, 276); -#line 12628 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|9: - //| LOAD_ADDR FCARG1a, (ptrdiff_t)varname - dasm_put(Dst, 4230); - if (IS_SIGNED_32BIT((ptrdiff_t)varname)) { - dasm_put(Dst, 798, ((ptrdiff_t)(ptrdiff_t)varname)); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)(ptrdiff_t)varname)), (unsigned int)((((ptrdiff_t)(ptrdiff_t)varname))>>32)); - } -#line 12630 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (opline->extended_value) { - //| add FCARG2a, opline->extended_value - dasm_put(Dst, 7385, opline->extended_value); -#line 12632 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_global_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_global_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_global_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_fetch_global_helper)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_global_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 12634 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp <1 - //|.code - dasm_put(Dst, 7390); -#line 12636 "/home/jakub/prog/php/83/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, 1775, (tmp_reg), ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 1768, (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, 2496, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1782, (Z_REG(res_addr)), (tmp_reg)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12661 "/home/jakub/prog/php/83/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, 7396, (tmp_reg), offsetof(zval, u1.v.type), IS_REFERENCE, (tmp_reg), (tmp_reg), 0, (tmp_reg), offsetof(zend_reference, val)); - } -#line 12662 "/home/jakub/prog/php/83/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, 1674, (tmp_reg), (Z_REG(res_addr)), Z_OFFSET(res_addr)); -#line 12665 "/home/jakub/prog/php/83/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, 336, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type), type_code); -#line 12673 "/home/jakub/prog/php/83/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, 7426, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type), type_mask); -#line 12679 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|.cold_code - dasm_put(Dst, 276); -#line 12682 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 12683 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12689 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| ADDR_STORE aword EX->opline, opline, r0 - if (IS_SIGNED_32BIT(opline)) { - dasm_put(Dst, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } -#line 12694 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)(ptrdiff_t)arg_info)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)(ptrdiff_t)arg_info)), (unsigned int)((((ptrdiff_t)(ptrdiff_t)arg_info))>>32)); - } -#line 12696 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_verify_arg_slow)); - } else { - if (IS_SIGNED_32BIT(zend_jit_verify_arg_slow)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_verify_arg_slow)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_verify_arg_slow)), (unsigned int)((((ptrdiff_t)zend_jit_verify_arg_slow))>>32)); - } - dasm_put(Dst, 66); - } -#line 12697 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - - if (check_exception) { - //| test al, al - dasm_put(Dst, 5368); -#line 12700 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (in_cold) { - //| jnz >1 - //| jmp ->exception_handler - //|.code - dasm_put(Dst, 6073); -#line 12704 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 12705 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jz ->exception_handler - dasm_put(Dst, 6000); -#line 12707 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (in_cold) { - //| jmp >1 - //|.code - dasm_put(Dst, 3817); -#line 12711 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 12712 "/home/jakub/prog/php/83/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, 7449, Dt1(->This.u2.num_args), arg_num, (ptrdiff_t)(exit_addr)); -#line 12746 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| cmp dword EX->This.u2.num_args, arg_num - //| jb >1 - //|.cold_code - dasm_put(Dst, 7458, Dt1(->This.u2.num_args), arg_num); -#line 12751 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 12752 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 12754 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| ADDR_STORE aword EX->opline, opline, r0 - if (IS_SIGNED_32BIT(opline)) { - dasm_put(Dst, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } -#line 12756 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| mov FCARG1a, FP - //| EXT_CALL zend_missing_arg_error, r0 - dasm_put(Dst, 73); - if (MAY_USE_32BIT_ADDR(zend_missing_arg_error)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_missing_arg_error)); - } else { - if (IS_SIGNED_32BIT(zend_missing_arg_error)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_missing_arg_error)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_missing_arg_error)), (unsigned int)((((ptrdiff_t)zend_missing_arg_error))>>32)); - } - dasm_put(Dst, 66); - } -#line 12759 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->exception_handler - //|.code - dasm_put(Dst, 5915); -#line 12761 "/home/jakub/prog/php/83/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, 1569, ((ptrdiff_t)(opline + 1))); - } else { - dasm_put(Dst, 1574, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32)); - } - } else { - if (IS_SIGNED_32BIT((opline + 1))) { - dasm_put(Dst, 313, Dt1(->opline), ((ptrdiff_t)(opline + 1))); - } else { - dasm_put(Dst, 1579, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32), Dt1(->opline)); - } - } -#line 12773 "/home/jakub/prog/php/83/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, 2735, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } - } else if (!IS_SIGNED_32BIT(zv)) { - dasm_put(Dst, 1768, (ZREG_R0), (unsigned int)(((uintptr_t)zv)), (unsigned int)((((uintptr_t)zv))>>32)); - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); - } else { - dasm_put(Dst, 2028, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); - } - } else { - if (CAN_USE_AVX()) { - dasm_put(Dst, 1978, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); - } else { - dasm_put(Dst, 1988, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 2735, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { - dasm_put(Dst, 1768, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); - } else { - dasm_put(Dst, 1775, (ZREG_R0), Z_LVAL_P(zv)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1760, (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, 1768, (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, 1768, (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, 1782, (ZREG_R0), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } - } - } else { - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1775, (Z_REG(res_addr)), Z_LVAL_P(zv)); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 3894, (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, 1684, (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<>32)); - } else { - dasm_put(Dst, 3918, Z_LVAL_P(zv)); - } -#line 12793 "/home/jakub/prog/php/83/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, 7469, Dt1(->This.u2.num_args), arg_num); -#line 12800 "/home/jakub/prog/php/83/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, 2735, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } - } else if (!IS_SIGNED_32BIT(zv)) { - dasm_put(Dst, 1768, (ZREG_R0), (unsigned int)(((uintptr_t)zv)), (unsigned int)((((uintptr_t)zv))>>32)); - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); - } else { - dasm_put(Dst, 2028, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); - } - } else { - if (CAN_USE_AVX()) { - dasm_put(Dst, 1978, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); - } else { - dasm_put(Dst, 1988, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 2735, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { - dasm_put(Dst, 1768, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); - } else { - dasm_put(Dst, 1775, (ZREG_R0), Z_LVAL_P(zv)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1760, (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, 1768, (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, 1768, (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, 1782, (ZREG_R0), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } - } - } else { - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1775, (Z_REG(res_addr)), Z_LVAL_P(zv)); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 3894, (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, 1684, (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<>32)); - } else { - dasm_put(Dst, 3918, Z_LVAL_P(zv)); - } -#line 12804 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 12810 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| ADDR_STORE aword EX->opline, opline, r0 - if (IS_SIGNED_32BIT(opline)) { - dasm_put(Dst, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } -#line 12812 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12814 "/home/jakub/prog/php/83/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, 7479, Dt1(->func), offsetof(zend_op_array, scope)); - if (MAY_USE_32BIT_ADDR(zval_update_constant_ex)) { - dasm_put(Dst, 53, (ptrdiff_t)(zval_update_constant_ex)); - } else { - if (IS_SIGNED_32BIT(zval_update_constant_ex)) { - dasm_put(Dst, 56, ((ptrdiff_t)zval_update_constant_ex)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zval_update_constant_ex)), (unsigned int)((((ptrdiff_t)zval_update_constant_ex))>>32)); - } - dasm_put(Dst, 66); - } -#line 12818 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| .else - //| EXT_CALL zval_update_constant_ex, r0 - //| .endif - //| test al, al - //| jnz >1 - //|.cold_code - dasm_put(Dst, 7488); -#line 12824 "/home/jakub/prog/php/83/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, 70); - 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, 263, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); - dasm_put(Dst, 70); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - 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))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } -#line 12826 "/home/jakub/prog/php/83/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 12827 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->exception_handler - //|.code - dasm_put(Dst, 7496, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_UNDEF); -#line 12829 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|5: - dasm_put(Dst, 509); -#line 12832 "/home/jakub/prog/php/83/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, 1569, ((ptrdiff_t)(opline + 1))); - } else { - dasm_put(Dst, 1574, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32)); - } - } else { - if (IS_SIGNED_32BIT((opline + 1))) { - dasm_put(Dst, 313, Dt1(->opline), ((ptrdiff_t)(opline + 1))); - } else { - dasm_put(Dst, 1579, (unsigned int)(((ptrdiff_t)(opline + 1))), (unsigned int)((((ptrdiff_t)(opline + 1)))>>32), Dt1(->opline)); - } - } -#line 12856 "/home/jakub/prog/php/83/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, 7510, (unsigned int)(((ptrdiff_t)ce)), (unsigned int)((((ptrdiff_t)ce))>>32), offsetof(zend_object, ce)); - } else { -#line 12877 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| cmp aword [FCARG1a + offsetof(zend_object, ce)], ce - dasm_put(Dst, 7519, offsetof(zend_object, ce), ce); - } -#line 12879 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.else - //| cmp aword [FCARG1a + offsetof(zend_object, ce)], ce - //|.endif - //| jne &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 12883 "/home/jakub/prog/php/83/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, 4245, (Z_REG(this_addr)), Z_OFFSET(this_addr)); -#line 12922 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12928 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| IF_NOT_Z_TYPE FCARG1a, IS_INDIRECT, >1 - //| GET_Z_PTR FCARG1a, FCARG1a - //|1: - dasm_put(Dst, 7525, offsetof(zval, u1.v.type), IS_INDIRECT); -#line 12931 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 12936 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| ZVAL_DEREF FCARG1a, op1_info - if (op1_info & MAY_BE_REF) { - dasm_put(Dst, 5322, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 12938 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT, (ptrdiff_t)(exit_addr)); -#line 12949 "/home/jakub/prog/php/83/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, 4379, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT); -#line 12951 "/home/jakub/prog/php/83/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, 4245, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 12954 "/home/jakub/prog/php/83/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, 7539, 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 12988 "/home/jakub/prog/php/83/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, 3655); -#line 12991 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (opline->opcode == ZEND_FETCH_OBJ_W) { - //| jl >5 - dasm_put(Dst, 7560); -#line 12993 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jl >8 // dynamic property - dasm_put(Dst, 7565); -#line 12995 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - //| mov edx, dword [FCARG1a + r0 + 8] - //| IF_UNDEF dl, >5 - //| add FCARG1a, r0 - dasm_put(Dst, 7570, 8); -#line 13000 "/home/jakub/prog/php/83/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, 7585, Dt1(->run_time_cache), (opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) + sizeof(void*) * 2); -#line 13011 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| test dword [FCARG2a + offsetof(zend_property_info, flags)], ZEND_ACC_READONLY - dasm_put(Dst, 7603, offsetof(zend_property_info, flags), ZEND_ACC_READONLY); -#line 13013 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (flags) { - //| jz >3 - dasm_put(Dst, 4027); -#line 13015 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jz >4 - dasm_put(Dst, 287); -#line 13017 "/home/jakub/prog/php/83/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, 7611, offsetof(zval, u1.v.type), IS_OBJECT); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 13022 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO res_addr, IS_OBJECT_EX - dasm_put(Dst, 2312, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 13023 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >9 - //|2: - //| mov eax, dword [FCARG1a + offsetof(zval, u2.extra)] - //| test eax, IS_PROP_REINITABLE - //| jz >6 - //| and eax, ~IS_PROP_REINITABLE - //| mov dword [FCARG1a + offsetof(zval, u2.extra)], eax - dasm_put(Dst, 7626, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_OBJECT_EX, offsetof(zval, u2.extra), IS_PROP_REINITABLE, ~IS_PROP_REINITABLE, offsetof(zval, u2.extra)); -#line 13030 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (flags) { - //| jmp >3 - dasm_put(Dst, 3991); -#line 13032 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >4 - dasm_put(Dst, 328); -#line 13034 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|6: - //| mov FCARG1a, FCARG2a - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 7656); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 13038 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_readonly_property_modification_error)); - } else { - if (IS_SIGNED_32BIT(zend_readonly_property_modification_error)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_readonly_property_modification_error)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_readonly_property_modification_error)), (unsigned int)((((ptrdiff_t)zend_readonly_property_modification_error))>>32)); - } - dasm_put(Dst, 66); - } -#line 13039 "/home/jakub/prog/php/83/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 13040 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >9 - //|3: - dasm_put(Dst, 7663, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), _IS_ERROR); -#line 13042 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 13044 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_check_array_promotion)); - } else { - if (IS_SIGNED_32BIT(zend_jit_check_array_promotion)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_check_array_promotion)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_check_array_promotion)), (unsigned int)((((ptrdiff_t)zend_jit_check_array_promotion))>>32)); - } - dasm_put(Dst, 66); - } -#line 13045 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >9 - dasm_put(Dst, 3717); -#line 13046 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13049 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_create_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_create_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_create_typed_ref)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_create_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_create_typed_ref))>>32)); - } - dasm_put(Dst, 66); - } -#line 13054 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.if not(X64) - //| add r4, 12 - //|.endif - //| jmp >9 - dasm_put(Dst, 3717); -#line 13058 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - ZEND_ASSERT(flags == 0); - } - //|.code - dasm_put(Dst, 373); -#line 13062 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|4: - dasm_put(Dst, 375); -#line 13063 "/home/jakub/prog/php/83/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, 7678, prop_info->offset + 8, (ptrdiff_t)(exit_addr)); -#line 13078 "/home/jakub/prog/php/83/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, 7687, prop_info->offset + 8); -#line 13083 "/home/jakub/prog/php/83/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 + offsetof(zval, u1.type_info)] - dasm_put(Dst, 7697, prop_info->offset + offsetof(zval, u1.type_info)); -#line 13088 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| IF_NOT_TYPE dl, IS_OBJECT, >4 - //| GET_ZVAL_PTR r0, prop_addr - dasm_put(Dst, 7701, IS_OBJECT); - ZEND_ASSERT(Z_MODE(prop_addr) == IS_MEM_ZVAL); -#line 13091 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GC_ADDREF r0 - //| SET_ZVAL_PTR res_addr, r0 - dasm_put(Dst, 7710, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 13093 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO res_addr, IS_OBJECT_EX - dasm_put(Dst, 2312, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 13094 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >9 - //|.cold_code - dasm_put(Dst, 7721, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_OBJECT_EX); -#line 13096 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|4: - //| mov eax, dword [FCARG1a + prop_info->offset + offsetof(zval, u2.extra)] - //| test eax, IS_PROP_REINITABLE - //| jz >6 - //| and eax, ~IS_PROP_REINITABLE - //| mov dword [FCARG1a + prop_info->offset + offsetof(zval, u2.extra)], eax - //| jmp >4 - //|6: - //| LOAD_ADDR FCARG1a, prop_info - dasm_put(Dst, 7735, prop_info->offset + offsetof(zval, u2.extra), IS_PROP_REINITABLE, ~IS_PROP_REINITABLE, prop_info->offset + offsetof(zval, u2.extra)); - if (IS_SIGNED_32BIT(prop_info)) { - dasm_put(Dst, 798, ((ptrdiff_t)prop_info)); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)prop_info)), (unsigned int)((((ptrdiff_t)prop_info))>>32)); - } -#line 13105 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 13106 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_readonly_property_modification_error)); - } else { - if (IS_SIGNED_32BIT(zend_readonly_property_modification_error)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_readonly_property_modification_error)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_readonly_property_modification_error)), (unsigned int)((((ptrdiff_t)zend_readonly_property_modification_error))>>32)); - } - dasm_put(Dst, 66); - } -#line 13107 "/home/jakub/prog/php/83/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 13108 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >9 - //|.code - dasm_put(Dst, 7759, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), _IS_ERROR); -#line 13110 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|4: - dasm_put(Dst, 375); -#line 13111 "/home/jakub/prog/php/83/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, 7697, prop_info->offset + 8); -#line 13122 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| cmp dl, IS_FALSE - //| jle >1 - //|.cold_code - dasm_put(Dst, 7773, IS_FALSE); -#line 13126 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 13127 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(prop_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(prop_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13129 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| LOAD_ADDR FCARG2a, prop_info - if (IS_SIGNED_32BIT(prop_info)) { - dasm_put(Dst, 751, ((ptrdiff_t)prop_info)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)prop_info)), (unsigned int)((((ptrdiff_t)prop_info))>>32)); - } -#line 13131 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 13132 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_check_array_promotion)); - } else { - if (IS_SIGNED_32BIT(zend_jit_check_array_promotion)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_check_array_promotion)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_check_array_promotion)), (unsigned int)((((ptrdiff_t)zend_jit_check_array_promotion))>>32)); - } - dasm_put(Dst, 66); - } -#line 13133 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >9 - //|.code - dasm_put(Dst, 4204); -#line 13135 "/home/jakub/prog/php/83/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, 7697, prop_info->offset + 8); -#line 13140 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| IF_TYPE dl, IS_REFERENCE, >1 - dasm_put(Dst, 7783, IS_REFERENCE); -#line 13142 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)prop_info)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)prop_info)), (unsigned int)((((ptrdiff_t)prop_info))>>32)); - } -#line 13144 "/home/jakub/prog/php/83/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, 7792, offsetof(zend_object, ce), offsetof(zend_class_entry, properties_info_table), prop_info_offset); -#line 13151 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(prop_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(prop_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13154 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13157 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_create_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_create_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_create_typed_ref)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_create_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_create_typed_ref))>>32)); - } - dasm_put(Dst, 66); - } -#line 13162 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.if not(X64) - //| add r4, 12 - //|.endif - //| jmp >9 - //|1: - dasm_put(Dst, 7805); -#line 13167 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(prop_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(prop_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13175 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| SET_ZVAL_PTR res_addr, FCARG1a - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 13177 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO res_addr, IS_INDIRECT - dasm_put(Dst, 7812, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_INDIRECT); -#line 13178 "/home/jakub/prog/php/83/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; - uint8_t 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, 56, ((ptrdiff_t)Z_ZV(prop_addr))); - } else { - dasm_put(Dst, 61, (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, 6465, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); - } else { - dasm_put(Dst, 6473, (Z_REG(prop_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13222 "/home/jakub/prog/php/83/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, 7697, prop_info->offset + 8); -#line 13239 "/home/jakub/prog/php/83/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, 7820, IS_REFERENCE, offsetof(zend_reference, val)); - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 7836, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info)); -#line 13245 "/home/jakub/prog/php/83/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, 70); -#line 13250 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (type_loaded) { - //| IF_NOT_TYPE dl, type, &exit_addr - dasm_put(Dst, 7243, type, (ptrdiff_t)(exit_addr)); -#line 13252 "/home/jakub/prog/php/83/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, 5903, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval, u1.v.type), type, (ptrdiff_t)(exit_addr)); -#line 13254 "/home/jakub/prog/php/83/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, 7836, (Z_REG(val_addr)), Z_OFFSET(val_addr)+offsetof(zval,u1.type_info)); -#line 13259 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|1: - //| IF_NOT_TYPE dl, type, &exit_addr - dasm_put(Dst, 7844, type, (ptrdiff_t)(exit_addr)); -#line 13262 "/home/jakub/prog/php/83/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, 1782, (Z_REG(val_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R1), (ZREG_R1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R1), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(val_addr)), (ZREG_R1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R1), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } - } -#line 13265 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); -#line 13270 "/home/jakub/prog/php/83/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, 7123, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 13273 "/home/jakub/prog/php/83/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, 4107); - } - dasm_put(Dst, 2199); - } -#line 13275 "/home/jakub/prog/php/83/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, 276); -#line 13290 "/home/jakub/prog/php/83/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, 509); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 13294 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_obj_w_slow)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_obj_w_slow)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_obj_w_slow)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_fetch_obj_w_slow)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_obj_w_slow))>>32)); - } - dasm_put(Dst, 66); - } -#line 13296 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_obj_r_slow)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_obj_r_slow)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_obj_r_slow)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_fetch_obj_r_slow)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_obj_r_slow))>>32)); - } - dasm_put(Dst, 66); - } -#line 13298 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_obj_is_slow)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_obj_is_slow)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_obj_is_slow)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_fetch_obj_is_slow)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_obj_is_slow))>>32)); - } - dasm_put(Dst, 66); - } -#line 13300 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jmp >9 - dasm_put(Dst, 3717); -#line 13302 "/home/jakub/prog/php/83/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, 4482); -#line 13306 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 13308 "/home/jakub/prog/php/83/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, 336, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); -#line 13314 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| mov FCARG1d, opline->op1.var - //| EXT_CALL zend_jit_undefined_op_helper, r0 - dasm_put(Dst, 2338, opline->op1.var); - if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 13317 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| LOAD_ZVAL_ADDR FCARG1a, orig_op1_addr - dasm_put(Dst, 70); - if (Z_MODE(orig_op1_addr) == IS_CONST_ZVAL) { - if (IS_SIGNED_32BIT(Z_ZV(orig_op1_addr))) { - dasm_put(Dst, 798, ((ptrdiff_t)Z_ZV(orig_op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(orig_op1_addr)), Z_OFFSET(orig_op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(orig_op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13319 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13321 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_STRVAL_P(member))); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)Z_STRVAL_P(member))), (unsigned int)((((ptrdiff_t)Z_STRVAL_P(member)))>>32)); - } -#line 13323 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_invalid_property_write)); - } else { - if (IS_SIGNED_32BIT(zend_jit_invalid_property_write)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_invalid_property_write)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_invalid_property_write)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_property_write))>>32)); - } - dasm_put(Dst, 66); - } -#line 13325 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), _IS_ERROR); -#line 13326 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_invalid_property_read)); - } else { - if (IS_SIGNED_32BIT(zend_jit_invalid_property_read)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_invalid_property_read)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_invalid_property_read)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_property_read))>>32)); - } - dasm_put(Dst, 66); - } -#line 13328 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); -#line 13329 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jmp >9 - dasm_put(Dst, 3717); -#line 13331 "/home/jakub/prog/php/83/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 13333 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >9 - dasm_put(Dst, 3775, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); -#line 13334 "/home/jakub/prog/php/83/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, 7854); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 13343 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_obj_r_dynamic)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_obj_r_dynamic)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_obj_r_dynamic)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_fetch_obj_r_dynamic)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_obj_r_dynamic))>>32)); - } - dasm_put(Dst, 66); - } -#line 13345 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_fetch_obj_is_dynamic)); - } else { - if (IS_SIGNED_32BIT(zend_jit_fetch_obj_is_dynamic)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_fetch_obj_is_dynamic)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_fetch_obj_is_dynamic)), (unsigned int)((((ptrdiff_t)zend_jit_fetch_obj_is_dynamic))>>32)); - } - dasm_put(Dst, 66); - } -#line 13347 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jmp >9 - dasm_put(Dst, 3717); -#line 13349 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|.code; - dasm_put(Dst, 373); -#line 13352 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|9: // END - dasm_put(Dst, 4230); -#line 13353 "/home/jakub/prog/php/83/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 13360 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GET_ZVAL_PTR FCARG1a, orig_op1_addr - dasm_put(Dst, 2178, (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 13361 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GC_DELREF FCARG1a - //| jnz >1 - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 7860, (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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 13364 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_extract_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_extract_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_extract_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_extract_helper)), (unsigned int)((((ptrdiff_t)zend_jit_extract_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 13365 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 13366 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 13371 "/home/jakub/prog/php/83/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, 4245, (Z_REG(this_addr)), Z_OFFSET(this_addr)); -#line 13432 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13437 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| IF_NOT_Z_TYPE FCARG1a, IS_INDIRECT, >1 - //| GET_Z_PTR FCARG1a, FCARG1a - //|1: - dasm_put(Dst, 7525, offsetof(zval, u1.v.type), IS_INDIRECT); -#line 13440 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13445 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| ZVAL_DEREF FCARG1a, op1_info - if (op1_info & MAY_BE_REF) { - dasm_put(Dst, 5322, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 13447 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT, (ptrdiff_t)(exit_addr)); -#line 13458 "/home/jakub/prog/php/83/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 13460 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 3386, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT); -#line 13461 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 70); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 13463 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13465 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| LOAD_ADDR FCARG2a, ZSTR_VAL(name) - if (IS_SIGNED_32BIT(ZSTR_VAL(name))) { - dasm_put(Dst, 751, ((ptrdiff_t)ZSTR_VAL(name))); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)ZSTR_VAL(name))), (unsigned int)((((ptrdiff_t)ZSTR_VAL(name)))>>32)); - } -#line 13467 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_invalid_property_incdec)); - } else { - if (IS_SIGNED_32BIT(zend_jit_invalid_property_incdec)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_invalid_property_incdec)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_invalid_property_incdec)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_property_incdec))>>32)); - } - dasm_put(Dst, 66); - } -#line 13468 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->exception_handler - //|.code - dasm_put(Dst, 5915); -#line 13470 "/home/jakub/prog/php/83/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, 4245, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 13473 "/home/jakub/prog/php/83/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, 7875, Dt1(->run_time_cache), opline->extended_value, offsetof(zend_object, ce)); -#line 13518 "/home/jakub/prog/php/83/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, 7892, opline->extended_value + sizeof(void*) * 2); -#line 13521 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| mov r0, aword [r0 + opline->extended_value + sizeof(void*)] - //| test r0, r0 - //| jl >7 - dasm_put(Dst, 7902, opline->extended_value + sizeof(void*)); -#line 13525 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (!use_prop_guard) { - //| IF_TYPE byte [FCARG1a + r0 + 8], IS_UNDEF, >7 - dasm_put(Dst, 7914, 8, IS_UNDEF); -#line 13527 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| add FCARG1a, r0 - dasm_put(Dst, 7581); -#line 13529 "/home/jakub/prog/php/83/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, 7925, prop_info->offset + 8, IS_UNDEF, (ptrdiff_t)(exit_addr)); -#line 13541 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| IF_TYPE byte [FCARG1a + prop_info->offset + 8], IS_UNDEF, >7 - dasm_put(Dst, 7933, prop_info->offset + 8, IS_UNDEF); -#line 13543 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 13549 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)prop_info)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)prop_info)), (unsigned int)((((ptrdiff_t)prop_info))>>32)); - } -#line 13551 "/home/jakub/prog/php/83/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, 7792, offsetof(zend_object, ce), offsetof(zend_class_entry, properties_info_table), prop_info_offset); -#line 13558 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(prop_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(prop_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13560 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_inc_typed_prop)); - } else { - if (IS_SIGNED_32BIT(zend_jit_inc_typed_prop)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_inc_typed_prop)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_inc_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_inc_typed_prop))>>32)); - } - dasm_put(Dst, 66); - } -#line 13565 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_dec_typed_prop)); - } else { - if (IS_SIGNED_32BIT(zend_jit_dec_typed_prop)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_dec_typed_prop)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_dec_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_dec_typed_prop))>>32)); - } - dasm_put(Dst, 66); - } -#line 13569 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13576 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_pre_inc_typed_prop)); - } else { - if (IS_SIGNED_32BIT(zend_jit_pre_inc_typed_prop)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_pre_inc_typed_prop)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_pre_inc_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_pre_inc_typed_prop))>>32)); - } - dasm_put(Dst, 66); - } -#line 13583 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_pre_dec_typed_prop)); - } else { - if (IS_SIGNED_32BIT(zend_jit_pre_dec_typed_prop)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_pre_dec_typed_prop)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_pre_dec_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_pre_dec_typed_prop))>>32)); - } - dasm_put(Dst, 66); - } -#line 13586 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_post_inc_typed_prop)); - } else { - if (IS_SIGNED_32BIT(zend_jit_post_inc_typed_prop)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_post_inc_typed_prop)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_post_inc_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_post_inc_typed_prop))>>32)); - } - dasm_put(Dst, 66); - } -#line 13589 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_post_dec_typed_prop)); - } else { - if (IS_SIGNED_32BIT(zend_jit_post_dec_typed_prop)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_post_dec_typed_prop)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_post_dec_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_post_dec_typed_prop))>>32)); - } - dasm_put(Dst, 66); - } -#line 13592 "/home/jakub/prog/php/83/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, 5903, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), prop_type, (ptrdiff_t)(exit_addr)); -#line 13615 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(prop_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(prop_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13623 "/home/jakub/prog/php/83/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 13625 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GET_ZVAL_PTR FCARG1a, var_addr - dasm_put(Dst, 2252, (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 13626 "/home/jakub/prog/php/83/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, 7942, (Z_REG(var_addr)), Z_OFFSET(var_addr), offsetof(zend_reference, sources.ptr), offsetof(zend_reference, val)); -#line 13630 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 13631 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 13633 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - if (opline->result_type == IS_UNUSED) { - //| xor FCARG2a, FCARG2a - dasm_put(Dst, 2390); -#line 13636 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13638 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_pre_inc_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_pre_inc_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_pre_inc_typed_ref)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_pre_inc_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_pre_inc_typed_ref))>>32)); - } - dasm_put(Dst, 66); - } -#line 13642 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_pre_dec_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_pre_dec_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_pre_dec_typed_ref)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_pre_dec_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_pre_dec_typed_ref))>>32)); - } - dasm_put(Dst, 66); - } -#line 13645 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_post_inc_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_post_inc_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_post_inc_typed_ref)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_post_inc_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_post_inc_typed_ref))>>32)); - } - dasm_put(Dst, 66); - } -#line 13648 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_post_dec_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_post_dec_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_post_dec_typed_ref)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_post_dec_typed_ref)), (unsigned int)((((ptrdiff_t)zend_jit_post_dec_typed_ref))>>32)); - } - dasm_put(Dst, 66); - } -#line 13651 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - break; - default: - ZEND_UNREACHABLE(); - } - //| jmp >9 - //|.code - dasm_put(Dst, 4204); -#line 13657 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 13658 "/home/jakub/prog/php/83/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, 2252, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 13663 "/home/jakub/prog/php/83/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, 1782, (Z_REG(var_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(var_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(var_addr))); - } - } - } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(var_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(var_addr))); - } - } - } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(var_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(var_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(var_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(var_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(var_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(var_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(var_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(MAY_BE_LONG); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 13667 "/home/jakub/prog/php/83/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, 2265, (Z_REG(var_addr)), Z_OFFSET(var_addr), Z_L(1)); - } else if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 2274, (Z_REG(var_addr)), Z_L(1)); - } else { - ZEND_UNREACHABLE(); - } -#line 13671 "/home/jakub/prog/php/83/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, 2281, (Z_REG(var_addr)), Z_OFFSET(var_addr), Z_L(1)); - } else if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 2290, (Z_REG(var_addr)), Z_L(1)); - } else { - ZEND_UNREACHABLE(); - } -#line 13673 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| jo >3 - dasm_put(Dst, 7964); -#line 13675 "/home/jakub/prog/php/83/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, 1782, (Z_REG(var_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(var_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(var_addr))); - } - } - } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(var_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(var_addr))); - } - } - } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(var_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(var_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(var_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(var_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(var_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(var_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(var_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(MAY_BE_LONG); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 13678 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - //|.cold_code - dasm_put(Dst, 276); -#line 13681 "/home/jakub/prog/php/83/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, 2065); -#line 13688 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(prop_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(prop_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13692 "/home/jakub/prog/php/83/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, 1782, (Z_REG(var_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(var_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(var_addr))); - } - } - } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R2), (ZREG_R2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(var_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R2), Z_LVAL_P(Z_ZV(var_addr))); - } - } - } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(var_addr)), (ZREG_R2)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R2), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(var_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(var_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(var_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(var_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(var_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(var_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(var_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(var_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(var_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(var_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R2), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R2), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(MAY_BE_ANY); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 13695 "/home/jakub/prog/php/83/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, 2408); - } - dasm_put(Dst, 2233); - } -#line 13696 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13700 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_pre_inc)); - } else { - if (IS_SIGNED_32BIT(zend_jit_pre_inc)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_pre_inc)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_pre_inc)), (unsigned int)((((ptrdiff_t)zend_jit_pre_inc))>>32)); - } - dasm_put(Dst, 66); - } -#line 13701 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| EXT_CALL increment_function, r0 - if (MAY_USE_32BIT_ADDR(increment_function)) { - dasm_put(Dst, 53, (ptrdiff_t)(increment_function)); - } else { - if (IS_SIGNED_32BIT(increment_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)increment_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)increment_function)), (unsigned int)((((ptrdiff_t)increment_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 13703 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13707 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_pre_dec)); - } else { - if (IS_SIGNED_32BIT(zend_jit_pre_dec)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_pre_dec)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_pre_dec)), (unsigned int)((((ptrdiff_t)zend_jit_pre_dec))>>32)); - } - dasm_put(Dst, 66); - } -#line 13708 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| EXT_CALL decrement_function, r0 - if (MAY_USE_32BIT_ADDR(decrement_function)) { - dasm_put(Dst, 53, (ptrdiff_t)(decrement_function)); - } else { - if (IS_SIGNED_32BIT(decrement_function)) { - dasm_put(Dst, 56, ((ptrdiff_t)decrement_function)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)decrement_function)), (unsigned int)((((ptrdiff_t)decrement_function))>>32)); - } - dasm_put(Dst, 66); - } -#line 13710 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - if (var_info & MAY_BE_LONG) { - //| jmp >4 - dasm_put(Dst, 328); -#line 13714 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - if (var_info & MAY_BE_LONG) { - //|3: - dasm_put(Dst, 333); -#line 13718 "/home/jakub/prog/php/83/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, 61, (unsigned int)(0x43e0000000000000), (unsigned int)((0x43e0000000000000)>>32)); - if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 2306, (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } -#line 13722 "/home/jakub/prog/php/83/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, 1684, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); -#line 13723 "/home/jakub/prog/php/83/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, 2306, (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } -#line 13725 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); -#line 13726 "/home/jakub/prog/php/83/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, 61, (unsigned int)(0xc3e0000000000000), (unsigned int)((0xc3e0000000000000)>>32)); - if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 2306, (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } -#line 13741 "/home/jakub/prog/php/83/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, 1684, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); -#line 13742 "/home/jakub/prog/php/83/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, 2306, (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } -#line 13744 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_DOUBLE); -#line 13745 "/home/jakub/prog/php/83/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, 3797, (ptrdiff_t)(exit_addr)); -#line 13778 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >4 - //|.code - dasm_put(Dst, 369); -#line 13781 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|4: - dasm_put(Dst, 375); -#line 13782 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - } - - if (needs_slow_path) { - may_throw = 1; - //|.cold_code - dasm_put(Dst, 276); -#line 13789 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|7: - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 4482); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 13791 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)name)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)name)), (unsigned int)((((ptrdiff_t)name))>>32)); - } -#line 13793 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.if X64 - //| mov CARG3, EX->run_time_cache - //| add CARG3, opline->extended_value - dasm_put(Dst, 7969, Dt1(->run_time_cache), opline->extended_value); -#line 13796 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (opline->result_type == IS_UNUSED) { - //| xor CARG4, CARG4 - dasm_put(Dst, 4516); -#line 13798 "/home/jakub/prog/php/83/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, 4520, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 4525, (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, 4530, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 4538, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13800 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_pre_inc_obj_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_pre_inc_obj_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_pre_inc_obj_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_pre_inc_obj_helper)), (unsigned int)((((ptrdiff_t)zend_jit_pre_inc_obj_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 13816 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_pre_dec_obj_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_pre_dec_obj_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_pre_dec_obj_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_pre_dec_obj_helper)), (unsigned int)((((ptrdiff_t)zend_jit_pre_dec_obj_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 13819 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_post_inc_obj_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_post_inc_obj_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_post_inc_obj_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_post_inc_obj_helper)), (unsigned int)((((ptrdiff_t)zend_jit_post_inc_obj_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 13822 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_post_dec_obj_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_post_dec_obj_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_post_dec_obj_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_post_dec_obj_helper)), (unsigned int)((((ptrdiff_t)zend_jit_post_dec_obj_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 13825 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - break; - default: - ZEND_UNREACHABLE(); - } - - //|.if not(X64) - //| add r4, 8 - //|.endif - - //| jmp >9 - //|.code - dasm_put(Dst, 4204); -#line 13836 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|9: - dasm_put(Dst, 4230); -#line 13839 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 13844 "/home/jakub/prog/php/83/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, 4245, (Z_REG(this_addr)), Z_OFFSET(this_addr)); -#line 13894 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13899 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| IF_NOT_Z_TYPE FCARG1a, IS_INDIRECT, >1 - //| GET_Z_PTR FCARG1a, FCARG1a - //|1: - dasm_put(Dst, 7525, offsetof(zval, u1.v.type), IS_INDIRECT); -#line 13902 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13907 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| ZVAL_DEREF FCARG1a, op1_info - if (op1_info & MAY_BE_REF) { - dasm_put(Dst, 5322, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 13909 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT, (ptrdiff_t)(exit_addr)); -#line 13920 "/home/jakub/prog/php/83/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 13922 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 3386, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT); -#line 13923 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 70); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 13925 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 13927 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| LOAD_ADDR FCARG2a, ZSTR_VAL(name) - if (IS_SIGNED_32BIT(ZSTR_VAL(name))) { - dasm_put(Dst, 751, ((ptrdiff_t)ZSTR_VAL(name))); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)ZSTR_VAL(name))), (unsigned int)((((ptrdiff_t)ZSTR_VAL(name)))>>32)); - } -#line 13929 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_invalid_property_assign_op)); - } else { - if (IS_SIGNED_32BIT(zend_jit_invalid_property_assign_op)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_invalid_property_assign_op)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_invalid_property_assign_op)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_property_assign_op))>>32)); - } - dasm_put(Dst, 66); - } -#line 13931 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_invalid_property_assign)); - } else { - if (IS_SIGNED_32BIT(zend_jit_invalid_property_assign)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_invalid_property_assign)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_invalid_property_assign)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_property_assign))>>32)); - } - dasm_put(Dst, 66); - } -#line 13933 "/home/jakub/prog/php/83/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, 3802); -#line 13939 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >9 - dasm_put(Dst, 3717); -#line 13941 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.code - dasm_put(Dst, 373); -#line 13943 "/home/jakub/prog/php/83/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, 4245, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 13946 "/home/jakub/prog/php/83/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, 7875, Dt1(->run_time_cache), (opline+1)->extended_value, offsetof(zend_object, ce)); -#line 13991 "/home/jakub/prog/php/83/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, 7892, (opline+1)->extended_value + sizeof(void*) * 2); -#line 13994 "/home/jakub/prog/php/83/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, 7902, (opline+1)->extended_value + sizeof(void*)); -#line 13998 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (!use_prop_guard) { - //| IF_TYPE byte [FCARG1a + r0 + 8], IS_UNDEF, >7 - dasm_put(Dst, 7914, 8, IS_UNDEF); -#line 14000 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| add FCARG1a, r0 - dasm_put(Dst, 7581); -#line 14002 "/home/jakub/prog/php/83/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, 7925, prop_info->offset + 8, IS_UNDEF, (ptrdiff_t)(exit_addr)); -#line 14014 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| IF_TYPE byte [FCARG1a + prop_info->offset + 8], IS_UNDEF, >7 - dasm_put(Dst, 7933, prop_info->offset + 8, IS_UNDEF); -#line 14016 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 14026 "/home/jakub/prog/php/83/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 14029 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 3945, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); -#line 14030 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| GET_ZVAL_PTR FCARG1a, prop_addr - dasm_put(Dst, 70); - ZEND_ASSERT(Z_MODE(prop_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4245, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); -#line 14032 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(val_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14034 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.if X64 - //| LOAD_ADDR CARG3, binary_op - if (IS_SIGNED_32BIT(binary_op)) { - dasm_put(Dst, 3414, ((ptrdiff_t)binary_op)); - } else { - dasm_put(Dst, 3419, (unsigned int)(((ptrdiff_t)binary_op)), (unsigned int)((((ptrdiff_t)binary_op))>>32)); - } -#line 14037 "/home/jakub/prog/php/83/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, 53, (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, 56, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 14044 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_assign_op_to_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_op_to_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 14046 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.if not(X64) - //| add r4, 12 - //|.endif - //| jmp >9 - //|.code - dasm_put(Dst, 4204); -#line 14052 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)prop_info)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)prop_info)), (unsigned int)((((ptrdiff_t)prop_info))>>32)); - } -#line 14057 "/home/jakub/prog/php/83/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, 7792, offsetof(zend_object, ce), offsetof(zend_class_entry, properties_info_table), prop_info_offset); -#line 14064 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(prop_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(prop_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14066 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(val_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14068 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| LOAD_ADDR CARG4, binary_op - if (IS_SIGNED_32BIT(binary_op)) { - dasm_put(Dst, 4520, ((ptrdiff_t)binary_op)); - } else { - dasm_put(Dst, 4525, (unsigned int)(((ptrdiff_t)binary_op)), (unsigned int)((((ptrdiff_t)binary_op))>>32)); - } -#line 14069 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_assign_op_to_typed_prop)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_op_to_typed_prop)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_op_to_typed_prop)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 14076 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((info) & MAY_BE_GUARD) - && has_concrete_type((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 14086 "/home/jakub/prog/php/83/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, 5903, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), prop_type, (ptrdiff_t)(exit_addr)); -#line 14102 "/home/jakub/prog/php/83/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, 56, ((ptrdiff_t)Z_ZV(prop_addr))); - } else { - dasm_put(Dst, 61, (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, 6465, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); - } else { - dasm_put(Dst, 6473, (Z_REG(prop_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14109 "/home/jakub/prog/php/83/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 14110 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GET_ZVAL_PTR FCARG1a, var_addr - dasm_put(Dst, 2252, (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 14111 "/home/jakub/prog/php/83/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, 7978, (Z_REG(var_addr)), Z_OFFSET(var_addr), offsetof(zend_reference, sources.ptr), offsetof(zend_reference, val)); -#line 14115 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 14116 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(val_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14118 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 14121 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.if X64 - //| LOAD_ADDR CARG3, binary_op - if (IS_SIGNED_32BIT(binary_op)) { - dasm_put(Dst, 3414, ((ptrdiff_t)binary_op)); - } else { - dasm_put(Dst, 3419, (unsigned int)(((ptrdiff_t)binary_op)), (unsigned int)((((ptrdiff_t)binary_op))>>32)); - } -#line 14124 "/home/jakub/prog/php/83/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, 53, (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, 56, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref_tmp)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 14131 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_assign_op_to_typed_ref)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_op_to_typed_ref)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_op_to_typed_ref)); - } else { - dasm_put(Dst, 61, (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, 66); - } -#line 14133 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.if not(X64) - //| add r4, 12 - //|.endif - //| jmp >9 - //|.code - dasm_put(Dst, 4204); -#line 14139 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 14140 "/home/jakub/prog/php/83/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, 276); -#line 14222 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|7: - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 4482); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 14224 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)name)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)name)), (unsigned int)((((ptrdiff_t)name))>>32)); - } -#line 14226 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(val_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14228 "/home/jakub/prog/php/83/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, 8000, Dt1(->run_time_cache), (opline+1)->extended_value); - if (IS_SIGNED_32BIT(binary_op)) { - dasm_put(Dst, 8009, ((ptrdiff_t)binary_op)); - } else { - dasm_put(Dst, 8014, (unsigned int)(((ptrdiff_t)binary_op)), (unsigned int)((((ptrdiff_t)binary_op))>>32)); - } -#line 14235 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_assign_obj_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_obj_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_obj_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_assign_obj_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_assign_obj_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 14246 "/home/jakub/prog/php/83/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, 4331); - 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((val_info) & MAY_BE_GUARD) - && has_concrete_type((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 14258 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >9 - //|.code - dasm_put(Dst, 4204); -#line 14260 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|9: - dasm_put(Dst, 4230); -#line 14263 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 14268 "/home/jakub/prog/php/83/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, 4245, (Z_REG(this_addr)), Z_OFFSET(this_addr)); -#line 14320 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14325 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| IF_NOT_Z_TYPE FCARG1a, IS_INDIRECT, >1 - //| GET_Z_PTR FCARG1a, FCARG1a - //|1: - dasm_put(Dst, 7525, offsetof(zval, u1.v.type), IS_INDIRECT); -#line 14328 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14333 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| ZVAL_DEREF FCARG1a, op1_info - if (op1_info & MAY_BE_REF) { - dasm_put(Dst, 5322, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 14335 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT, (ptrdiff_t)(exit_addr)); -#line 14346 "/home/jakub/prog/php/83/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 14348 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 3386, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_OBJECT); -#line 14349 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 70); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 14351 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14353 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| LOAD_ADDR FCARG2a, ZSTR_VAL(name) - if (IS_SIGNED_32BIT(ZSTR_VAL(name))) { - dasm_put(Dst, 751, ((ptrdiff_t)ZSTR_VAL(name))); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)ZSTR_VAL(name))), (unsigned int)((((ptrdiff_t)ZSTR_VAL(name)))>>32)); - } -#line 14355 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_invalid_property_assign)); - } else { - if (IS_SIGNED_32BIT(zend_jit_invalid_property_assign)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_invalid_property_assign)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_invalid_property_assign)), (unsigned int)((((ptrdiff_t)zend_jit_invalid_property_assign))>>32)); - } - dasm_put(Dst, 66); - } -#line 14356 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_NULL); -#line 14358 "/home/jakub/prog/php/83/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, 3757); -#line 14363 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >9 - dasm_put(Dst, 3717); -#line 14365 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.code - dasm_put(Dst, 373); -#line 14367 "/home/jakub/prog/php/83/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, 4245, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 14370 "/home/jakub/prog/php/83/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, 8019, Dt1(->run_time_cache), opline->extended_value, offsetof(zend_object, ce)); -#line 14410 "/home/jakub/prog/php/83/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, 7483, opline->extended_value + sizeof(void*) * 2); -#line 14412 "/home/jakub/prog/php/83/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, 8036, opline->extended_value + sizeof(void*), 8, IS_UNDEF); -#line 14418 "/home/jakub/prog/php/83/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, 7593); -#line 14423 "/home/jakub/prog/php/83/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, 70); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 14426 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(val_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14428 "/home/jakub/prog/php/83/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, 4520, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 4525, (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, 4530, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 4538, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14430 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| xor CARG4, CARG4 - dasm_put(Dst, 4516); -#line 14432 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_assign_to_typed_prop)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_to_typed_prop)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_to_typed_prop)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_assign_to_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_assign_to_typed_prop))>>32)); - } - dasm_put(Dst, 66); - } -#line 14444 "/home/jakub/prog/php/83/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, 3757); -#line 14458 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp >9 - dasm_put(Dst, 3717); -#line 14460 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.code - dasm_put(Dst, 373); -#line 14462 "/home/jakub/prog/php/83/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, 7925, prop_info->offset + 8, IS_UNDEF, (ptrdiff_t)(exit_addr)); -#line 14475 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| IF_TYPE byte [FCARG1a + prop_info->offset + 8], IS_UNDEF, >5 - dasm_put(Dst, 8061, prop_info->offset + 8, IS_UNDEF); -#line 14477 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 14485 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)prop_info)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)prop_info)), (unsigned int)((((ptrdiff_t)prop_info))>>32)); - } -#line 14487 "/home/jakub/prog/php/83/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, 7792, offsetof(zend_object, ce), offsetof(zend_class_entry, properties_info_table), prop_info_offset); -#line 14494 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(prop_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(prop_addr)), Z_OFFSET(prop_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(prop_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14496 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(val_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14498 "/home/jakub/prog/php/83/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, 4520, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 4525, (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, 4530, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 4538, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14500 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| xor CARG4, CARG4 - dasm_put(Dst, 4516); -#line 14502 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_assign_to_typed_prop)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_to_typed_prop)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_to_typed_prop)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_assign_to_typed_prop)), (unsigned int)((((ptrdiff_t)zend_jit_assign_to_typed_prop))>>32)); - } - dasm_put(Dst, 66); - } -#line 14514 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((info) & MAY_BE_GUARD) - && has_concrete_type((info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)NULL)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 14524 "/home/jakub/prog/php/83/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, 276); -#line 14542 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|5: - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 509); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 14544 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)name)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)name)), (unsigned int)((((ptrdiff_t)name))>>32)); - } -#line 14546 "/home/jakub/prog/php/83/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, 3414, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 3419, (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, 3424, (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 3432, (Z_REG(val_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14548 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov CARG4, EX->run_time_cache - //| add CARG4, opline->extended_value - dasm_put(Dst, 8000, Dt1(->run_time_cache), opline->extended_value); -#line 14550 "/home/jakub/prog/php/83/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, 8009, ((ptrdiff_t)Z_ZV(res_addr))); - } else { - dasm_put(Dst, 8014, (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, 8070, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 8078, (Z_REG(res_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 14556 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.endif - } else { - //|.if X64WIN - //| mov aword A5, 0 - //|.else - //| xor CARG5, CARG5 - //|.endif - dasm_put(Dst, 4103); -#line 14563 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_assign_obj_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_assign_obj_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_assign_obj_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_assign_obj_helper)), (unsigned int)((((ptrdiff_t)zend_jit_assign_obj_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 14578 "/home/jakub/prog/php/83/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, 4482); - 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((val_info) & MAY_BE_GUARD) - && has_concrete_type((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 14590 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >9 - //|.code - dasm_put(Dst, 4204); -#line 14592 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (needs_val_dtor) { - //|.cold_code - dasm_put(Dst, 276); -#line 14594 "/home/jakub/prog/php/83/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, 4482); - 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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, (opline+1)->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((val_info) & MAY_BE_GUARD) - && has_concrete_type((val_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 14597 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >9 - //|.code - dasm_put(Dst, 4204); -#line 14599 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|9: - dasm_put(Dst, 4230); -#line 14602 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 14604 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 14622 "/home/jakub/prog/php/83/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, 8084, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_ARRAY); -#line 14626 "/home/jakub/prog/php/83/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, 8097, opline->op1.var + offsetof(zval, u2.fe_iter_idx)); - if (MAY_USE_32BIT_ADDR(zend_hash_iterator_del)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_hash_iterator_del)); - } else { - if (IS_SIGNED_32BIT(zend_hash_iterator_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_iterator_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_iterator_del)), (unsigned int)((((ptrdiff_t)zend_hash_iterator_del))>>32)); - } - dasm_put(Dst, 66); - } -#line 14631 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|7: - dasm_put(Dst, 4482); -#line 14632 "/home/jakub/prog/php/83/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, 263, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); - dasm_put(Dst, 70); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } -#line 14634 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 14658 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.if X64 - //| LOAD_ADDR CARG1, str - if (IS_SIGNED_32BIT(str)) { - dasm_put(Dst, 798, ((ptrdiff_t)str)); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)str)), (unsigned int)((((ptrdiff_t)str))>>32)); - } -#line 14660 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| LOAD_ADDR CARG2, len - if (IS_SIGNED_32BIT(len)) { - dasm_put(Dst, 751, ((ptrdiff_t)len)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)len)), (unsigned int)((((ptrdiff_t)len))>>32)); - } -#line 14661 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL zend_write, r0 - if (MAY_USE_32BIT_ADDR(zend_write)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_write)); - } else { - if (IS_SIGNED_32BIT(zend_write)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_write)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_write)), (unsigned int)((((ptrdiff_t)zend_write))>>32)); - } - dasm_put(Dst, 66); - } -#line 14662 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 14677 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GET_ZVAL_PTR r0, op1_addr - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); -#line 14678 "/home/jakub/prog/php/83/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, 8111, (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, 53, (ptrdiff_t)(zend_write)); - } else { - if (IS_SIGNED_32BIT(zend_write)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_write)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_write)), (unsigned int)((((ptrdiff_t)zend_write))>>32)); - } - dasm_put(Dst, 66); - } -#line 14682 "/home/jakub/prog/php/83/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, 263, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type_flags), IS_TYPE_REFCOUNTED); - dasm_put(Dst, 70); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } -#line 14691 "/home/jakub/prog/php/83/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, 1775, (Z_REG(res_addr)), len); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 3894, (Z_REG(res_addr)), Z_OFFSET(res_addr), len); - } -#line 14710 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); -#line 14712 "/home/jakub/prog/php/83/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 14720 "/home/jakub/prog/php/83/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, 1665, (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 14721 "/home/jakub/prog/php/83/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 14726 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov r0, aword [r0 + offsetof(zend_string, len)] - //| SET_ZVAL_LVAL res_addr, r0 - dasm_put(Dst, 8127, (Z_REG(op1_addr)), Z_OFFSET(op1_addr), offsetof(zend_string, len)); - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 2306, (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } -#line 14728 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); -#line 14729 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 14731 "/home/jakub/prog/php/83/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, 1775, (Z_REG(res_addr)), count); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 3894, (Z_REG(res_addr)), Z_OFFSET(res_addr), count); - } -#line 14746 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); -#line 14748 "/home/jakub/prog/php/83/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, 1674, (Z_REG(res_addr)), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 14757 "/home/jakub/prog/php/83/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, 2205, (Z_REG(res_addr)), (Z_REG(res_addr)), offsetof(HashTable, nNumOfElements)); -#line 14759 "/home/jakub/prog/php/83/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, 6009, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 14764 "/home/jakub/prog/php/83/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, 34, offsetof(HashTable, nNumOfElements)); - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 2306, (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } -#line 14767 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); -#line 14768 "/home/jakub/prog/php/83/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, 263, (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, 70); - } else { - ZEND_ASSERT(Z_MODE(ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->op1.var)) == IS_MEM_ZVAL); - dasm_put(Dst, 278, (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, 292, (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, 303); - } else { - dasm_put(Dst, 308); - } - } - do { - if (!((op1_info) & MAY_BE_GUARD) - && has_concrete_type((op1_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { - uint8_t 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, 53, (ptrdiff_t)(_efree)); - } else { - if (IS_SIGNED_32BIT(_efree)) { - dasm_put(Dst, 56, ((ptrdiff_t)_efree)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)_efree)), (unsigned int)((((ptrdiff_t)_efree))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_array_destroy)); - } else { - if (IS_SIGNED_32BIT(zend_array_destroy)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_array_destroy)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_array_destroy)), (unsigned int)((((ptrdiff_t)zend_array_destroy))>>32)); - } - dasm_put(Dst, 66); - } - } else { - if (MAY_USE_32BIT_ADDR(zend_jit_array_free)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_array_free)); - } else { - if (IS_SIGNED_32BIT(zend_jit_array_free)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_array_free)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_array_free)), (unsigned int)((((ptrdiff_t)zend_jit_array_free))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(zend_objects_store_del)); - } else { - if (IS_SIGNED_32BIT(zend_objects_store_del)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_objects_store_del)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_objects_store_del)), (unsigned int)((((ptrdiff_t)zend_objects_store_del))>>32)); - } - dasm_put(Dst, 66); - } - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (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, 53, (ptrdiff_t)(rc_dtor_func)); - } else { - if (IS_SIGNED_32BIT(rc_dtor_func)) { - dasm_put(Dst, 56, ((ptrdiff_t)rc_dtor_func)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)rc_dtor_func)), (unsigned int)((((ptrdiff_t)rc_dtor_func))>>32)); - } - dasm_put(Dst, 66); - } - } 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, 328); - } - dasm_put(Dst, 333); - } - 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, 336, (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, 278, (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, 349, (Z_REG(ref_addr)), Z_OFFSET(ref_addr)); - } - dasm_put(Dst, 359, (GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))); - if (MAY_USE_32BIT_ADDR(gc_possible_root)) { - dasm_put(Dst, 53, (ptrdiff_t)(gc_possible_root)); - } else { - if (IS_SIGNED_32BIT(gc_possible_root)) { - dasm_put(Dst, 56, ((ptrdiff_t)gc_possible_root)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)gc_possible_root)), (unsigned int)((((ptrdiff_t)gc_possible_root))>>32)); - } - dasm_put(Dst, 66); - } - } - 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, 369); - } - dasm_put(Dst, 375); - } - } -#line 14770 "/home/jakub/prog/php/83/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, 563, Dt1(->This.value.ptr)); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); -#line 14784 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO var_addr, IS_OBJECT_EX - dasm_put(Dst, 7812, (Z_REG(var_addr)), Z_OFFSET(var_addr)); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); -#line 14785 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GC_ADDREF FCARG1a - dasm_put(Dst, 8139, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info), IS_OBJECT_EX); -#line 14786 "/home/jakub/prog/php/83/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, 1742, Dt1(->This.u1.v.type), IS_OBJECT, (ptrdiff_t)(exit_addr)); -#line 14806 "/home/jakub/prog/php/83/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, 8151, Dt1(->This.u1.v.type), IS_OBJECT); -#line 14816 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 70); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 14818 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp ->invalid_this - //|.code - dasm_put(Dst, 8162); -#line 14820 "/home/jakub/prog/php/83/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, 3655); -#line 14842 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (default_label) { - //| jz &default_label - dasm_put(Dst, 1795, (ptrdiff_t)(default_label)); -#line 14844 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (next_opline) { - //| jz >3 - dasm_put(Dst, 4027); -#line 14846 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jz =>default_b - dasm_put(Dst, 4700, default_b); -#line 14848 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| LOAD_ADDR FCARG1a, jumptable - if (IS_SIGNED_32BIT(jumptable)) { - dasm_put(Dst, 798, ((ptrdiff_t)jumptable)); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)jumptable)), (unsigned int)((((ptrdiff_t)jumptable))>>32)); - } -#line 14850 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| sub r0, aword [FCARG1a + offsetof(HashTable, arData)] - dasm_put(Dst, 8168, offsetof(HashTable, arData)); -#line 14851 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (HT_IS_PACKED(jumptable)) { - //| mov FCARG1a, (sizeof(zval) / sizeof(void*)) - dasm_put(Dst, 798, (sizeof(zval) / sizeof(void*))); -#line 14853 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov FCARG1a, (sizeof(Bucket) / sizeof(void*)) - dasm_put(Dst, 798, (sizeof(Bucket) / sizeof(void*))); -#line 14855 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.if X64 - //| cqo - //|.else - //| cdq - //|.endif - //| idiv FCARG1a - //|.if X64 - dasm_put(Dst, 8173); -#line 14863 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (!IS_32BIT(dasm_end)) { - //| lea FCARG1a, aword [>4] - //| jmp aword [FCARG1a + r0] - dasm_put(Dst, 8181); -#line 14866 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp aword [r0 + >4] - dasm_put(Dst, 8191); -#line 14868 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.else - //| jmp aword [r0 + >4] - //|.endif - //|.jmp_table - dasm_put(Dst, 8197); -#line 14873 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.align aword - //|4: - dasm_put(Dst, 8199); -#line 14875 "/home/jakub/prog/php/83/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, 63, (unsigned int)((ptrdiff_t)(default_label)), (unsigned int)((unsigned long long)((ptrdiff_t)(default_label))>>32)); -#line 14885 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (next_opline) { - //| .aword >3 - dasm_put(Dst, 8204); -#line 14887 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| .aword =>default_b - dasm_put(Dst, 51, default_b); -#line 14889 "/home/jakub/prog/php/83/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, 51, b); -#line 14895 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (next_opline == target) { - //| .aword >3 - dasm_put(Dst, 8204); -#line 14897 "/home/jakub/prog/php/83/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, 63, (unsigned int)((ptrdiff_t)(exit_addr)), (unsigned int)((unsigned long long)((ptrdiff_t)(exit_addr))>>32)); -#line 14904 "/home/jakub/prog/php/83/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, 373); -#line 14914 "/home/jakub/prog/php/83/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, 1614, b); -#line 14967 "/home/jakub/prog/php/83/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 15002 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GET_ZVAL_LVAL ZREG_FCARG2, op1_addr - dasm_put(Dst, 336, (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, 1760, (ZREG_FCARG2), (ZREG_FCARG2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG2)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 15003 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 276); -#line 15004 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| // ZVAL_DEREF(op) - dasm_put(Dst, 70); -#line 15006 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE, (ptrdiff_t)(fallback_label)); -#line 15008 "/home/jakub/prog/php/83/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, 3360, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); -#line 15010 "/home/jakub/prog/php/83/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, 8207, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 15012 "/home/jakub/prog/php/83/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, 1743, offsetof(zend_reference, val)+offsetof(zval, u1.v.type), IS_LONG, (ptrdiff_t)(fallback_label)); -#line 15014 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| IF_NOT_Z_TYPE FCARG2a + offsetof(zend_reference, val), IS_LONG, >3 - dasm_put(Dst, 8215, offsetof(zend_reference, val)+offsetof(zval, u1.v.type), IS_LONG); -#line 15016 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| mov FCARG2a, aword [FCARG2a + offsetof(zend_reference, val.value.lval)] - //| jmp >2 - //|.code - dasm_put(Dst, 8224, offsetof(zend_reference, val.value.lval)); -#line 15020 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 15021 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG, (ptrdiff_t)(fallback_label)); -#line 15025 "/home/jakub/prog/php/83/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, 3360, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 15027 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG2), (ZREG_FCARG2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG2)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 15030 "/home/jakub/prog/php/83/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, 8234, jumptable->nNumUsed); -#line 15036 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (default_label) { - //| jae &default_label - dasm_put(Dst, 1756, (ptrdiff_t)(default_label)); -#line 15038 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (next_opline) { - //| jae >3 - dasm_put(Dst, 8240); -#line 15040 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jae =>default_b - dasm_put(Dst, 4822, default_b); -#line 15042 "/home/jakub/prog/php/83/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, 8245); -#line 15047 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp aword [FCARG2a * 8 + >4] - dasm_put(Dst, 8256); -#line 15049 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|.else - //| jmp aword [FCARG2a * 4 + >4] - //|.endif - //|.jmp_table - dasm_put(Dst, 8197); -#line 15054 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.align aword - //|4: - dasm_put(Dst, 8199); -#line 15056 "/home/jakub/prog/php/83/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, 63, (unsigned int)((ptrdiff_t)(default_label)), (unsigned int)((unsigned long long)((ptrdiff_t)(default_label))>>32)); -#line 15063 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (next_opline) { - //| .aword >3 - dasm_put(Dst, 8204); -#line 15065 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| .aword =>default_b - dasm_put(Dst, 51, default_b); -#line 15067 "/home/jakub/prog/php/83/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, 51, b); -#line 15073 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (next_opline == target) { - //| .aword >3 - dasm_put(Dst, 8204); -#line 15075 "/home/jakub/prog/php/83/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, 63, (unsigned int)((ptrdiff_t)(exit_addr)), (unsigned int)((unsigned long long)((ptrdiff_t)(exit_addr))>>32)); -#line 15082 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - zv++; - count--; - } while (count); - //|.code - dasm_put(Dst, 373); -#line 15088 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|3: - dasm_put(Dst, 333); -#line 15089 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| LOAD_ADDR FCARG1a, jumptable - if (IS_SIGNED_32BIT(jumptable)) { - dasm_put(Dst, 798, ((ptrdiff_t)jumptable)); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)jumptable)), (unsigned int)((((ptrdiff_t)jumptable))>>32)); - } -#line 15091 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_hash_index_find)); - } else { - if (IS_SIGNED_32BIT(zend_hash_index_find)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_index_find)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_index_find)), (unsigned int)((((ptrdiff_t)zend_hash_index_find))>>32)); - } - dasm_put(Dst, 66); - } -#line 15092 "/home/jakub/prog/php/83/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, 333); -#line 15096 "/home/jakub/prog/php/83/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 15102 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GET_ZVAL_PTR FCARG2a, op1_addr - dasm_put(Dst, 336, (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 15103 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|.cold_code - dasm_put(Dst, 8264, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 15104 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - //| // ZVAL_DEREF(op) - dasm_put(Dst, 70); -#line 15106 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE, (ptrdiff_t)(fallback_label)); -#line 15108 "/home/jakub/prog/php/83/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, 3360, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_REFERENCE); -#line 15110 "/home/jakub/prog/php/83/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, 8207, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 15112 "/home/jakub/prog/php/83/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, 1743, offsetof(zend_reference, val)+offsetof(zval, u1.v.type), IS_STRING, (ptrdiff_t)(fallback_label)); -#line 15114 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| IF_NOT_Z_TYPE FCARG2a + offsetof(zend_reference, val), IS_STRING, >3 - dasm_put(Dst, 8215, offsetof(zend_reference, val)+offsetof(zval, u1.v.type), IS_STRING); -#line 15116 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| mov FCARG2a, aword [FCARG2a + offsetof(zend_reference, val.value.ptr)] - //| jmp >2 - //|.code - dasm_put(Dst, 8224, offsetof(zend_reference, val.value.ptr)); -#line 15120 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|2: - dasm_put(Dst, 2065); -#line 15121 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING, (ptrdiff_t)(fallback_label)); -#line 15125 "/home/jakub/prog/php/83/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, 3360, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING); -#line 15127 "/home/jakub/prog/php/83/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, 8207, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 15130 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| LOAD_ADDR FCARG1a, jumptable - if (IS_SIGNED_32BIT(jumptable)) { - dasm_put(Dst, 798, ((ptrdiff_t)jumptable)); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)jumptable)), (unsigned int)((((ptrdiff_t)jumptable))>>32)); - } -#line 15132 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL zend_hash_find, r0 - if (MAY_USE_32BIT_ADDR(zend_hash_find)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_hash_find)); - } else { - if (IS_SIGNED_32BIT(zend_hash_find)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_find)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_find)), (unsigned int)((((ptrdiff_t)zend_hash_find))>>32)); - } - dasm_put(Dst, 66); - } -#line 15133 "/home/jakub/prog/php/83/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, 333); -#line 15137 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 756, (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, 2376, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2384, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 15142 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| ZVAL_DEREF FCARG2a, op1_info - if (op1_info & MAY_BE_REF) { - dasm_put(Dst, 5340, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 15143 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)jumptable)); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)jumptable)), (unsigned int)((((ptrdiff_t)jumptable))>>32)); - } -#line 15146 "/home/jakub/prog/php/83/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, 5176, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 15150 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 15152 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG, (ptrdiff_t)(default_label)); -#line 15154 "/home/jakub/prog/php/83/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, 3360, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG); -#line 15156 "/home/jakub/prog/php/83/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, 8273, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_LONG, default_b); -#line 15158 "/home/jakub/prog/php/83/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, 1760, (ZREG_FCARG2), (ZREG_FCARG2)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG2), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG2)); - } - } else { - ZEND_UNREACHABLE(); - } -#line 15161 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_hash_index_find)); - } else { - if (IS_SIGNED_32BIT(zend_hash_index_find)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_index_find)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_index_find)), (unsigned int)((((ptrdiff_t)zend_hash_index_find))>>32)); - } - dasm_put(Dst, 66); - } -#line 15162 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (op1_info & MAY_BE_STRING) { - //| jmp >2 - dasm_put(Dst, 3762); -#line 15164 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - if (op1_info & MAY_BE_STRING) { - //|5: - dasm_put(Dst, 509); -#line 15168 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING); -#line 15171 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING, (ptrdiff_t)(default_label)); -#line 15173 "/home/jakub/prog/php/83/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, 3360, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING); -#line 15175 "/home/jakub/prog/php/83/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, 8273, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_STRING, default_b); -#line 15177 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - //| GET_ZVAL_PTR FCARG2a, op1_addr - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); -#line 15180 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL zend_hash_find, r0 - dasm_put(Dst, 8207, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - if (MAY_USE_32BIT_ADDR(zend_hash_find)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_hash_find)); - } else { - if (IS_SIGNED_32BIT(zend_hash_find)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_find)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_find)), (unsigned int)((((ptrdiff_t)zend_hash_find))>>32)); - } - dasm_put(Dst, 66); - } -#line 15181 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|2: - dasm_put(Dst, 2065); -#line 15183 "/home/jakub/prog/php/83/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, 3411); -#line 15189 "/home/jakub/prog/php/83/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, 5903, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF, (ptrdiff_t)(default_label)); -#line 15192 "/home/jakub/prog/php/83/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, 3360, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF); -#line 15194 "/home/jakub/prog/php/83/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, 8273, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_UNDEF, default_b); -#line 15196 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 15200 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1d, opline->op1.var - //| EXT_CALL zend_jit_undefined_op_helper, r0 - dasm_put(Dst, 2338, opline->op1.var); - if (MAY_USE_32BIT_ADDR(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 15202 "/home/jakub/prog/php/83/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, 146, (ptrdiff_t)(default_label)); -#line 15208 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (next_opline) { - //| jmp >3 - dasm_put(Dst, 3991); -#line 15210 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jmp =>default_b - dasm_put(Dst, 1614, default_b); -#line 15212 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|3: - dasm_put(Dst, 333); -#line 15214 "/home/jakub/prog/php/83/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, 3373, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), type_code); -#line 15240 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| mov edx, 1 - //| GET_ZVAL_TYPE cl, op1_addr - dasm_put(Dst, 8285); - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); -#line 15243 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| shl edx, cl - //| test edx, type_mask - //| je >6 - dasm_put(Dst, 8291, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval,u1.v.type), type_mask); -#line 15246 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - if (needs_slow_check) { - if (slow_check_in_cold) { - //|.cold_code - dasm_put(Dst, 276); -#line 15251 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|6: - dasm_put(Dst, 3411); -#line 15252 "/home/jakub/prog/php/83/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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 8309, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 15254 "/home/jakub/prog/php/83/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 15256 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG1a, opline->op1.var - //| EXT_CALL zend_jit_undefined_op_helper, FCARG2a - dasm_put(Dst, 8318, (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, 53, (ptrdiff_t)(zend_jit_undefined_op_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_undefined_op_helper)) { - dasm_put(Dst, 751, ((ptrdiff_t)zend_jit_undefined_op_helper)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)zend_jit_undefined_op_helper)), (unsigned int)((((ptrdiff_t)zend_jit_undefined_op_helper))>>32)); - } - dasm_put(Dst, 8335); - } -#line 15258 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| test r0, r0 - //| jz ->exception_handler - //| LOAD_ADDR_ZTS FCARG1a, executor_globals, uninitialized_zval - dasm_put(Dst, 8339); - if (tsrm_ls_cache_tcb_offset) { - dasm_put(Dst, 5207, tsrm_ls_cache_tcb_offset); - } else { - dasm_put(Dst, 5213, tsrm_tls_index, tsrm_tls_offset); - } -#line 15261 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| jmp >8 - dasm_put(Dst, 8348, (executor_globals_offset + offsetof(zend_executor_globals, uninitialized_zval))); -#line 15262 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|7: - //| LOAD_ZVAL_ADDR FCARG1a, op1_addr - dasm_put(Dst, 4482); - if (Z_MODE(op1_addr) == IS_CONST_ZVAL) { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 15265 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|8: - //| mov FCARG2a, EX->func - //|.if X64 - //| LOAD_ADDR CARG3, (ptrdiff_t)arg_info - dasm_put(Dst, 8357, Dt1(->func)); - if (IS_SIGNED_32BIT((ptrdiff_t)arg_info)) { - dasm_put(Dst, 3414, ((ptrdiff_t)(ptrdiff_t)arg_info)); - } else { - dasm_put(Dst, 3419, (unsigned int)(((ptrdiff_t)(ptrdiff_t)arg_info)), (unsigned int)((((ptrdiff_t)(ptrdiff_t)arg_info))>>32)); - } -#line 15269 "/home/jakub/prog/php/83/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, 8364, Dt1(->run_time_cache), opline->op2.num); - if (MAY_USE_32BIT_ADDR(zend_jit_verify_return_slow)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_verify_return_slow)); - } else { - if (IS_SIGNED_32BIT(zend_jit_verify_return_slow)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_verify_return_slow)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_verify_return_slow)), (unsigned int)((((ptrdiff_t)zend_jit_verify_return_slow))>>32)); - } - dasm_put(Dst, 66); - } -#line 15272 "/home/jakub/prog/php/83/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, 4204); -#line 15287 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } - //|9: - dasm_put(Dst, 4230); -#line 15290 "/home/jakub/prog/php/83/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, uint8_t 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, 798, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(op1_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 15303 "/home/jakub/prog/php/83/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, 5322, offsetof(zval, u1.v.type), IS_REFERENCE, offsetof(zend_reference, val)); - } -#line 15306 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|1: - dasm_put(Dst, 70); -#line 15307 "/home/jakub/prog/php/83/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, 1614, target_label); -#line 15315 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_TRUE); -#line 15318 "/home/jakub/prog/php/83/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, 1614, target_label); -#line 15325 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_FALSE); -#line 15328 "/home/jakub/prog/php/83/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, 5382, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)+offsetof(zval, u1.v.type), IS_NULL); -#line 15332 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (exit_addr) { - if (smart_branch_opcode == ZEND_JMPNZ) { - //| jg &exit_addr - dasm_put(Dst, 3864, (ptrdiff_t)(exit_addr)); -#line 15335 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jle &exit_addr - dasm_put(Dst, 3860, (ptrdiff_t)(exit_addr)); -#line 15337 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (smart_branch_opcode) { - if (smart_branch_opcode == ZEND_JMPZ) { - //| jle =>target_label - dasm_put(Dst, 4704, target_label); -#line 15341 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (smart_branch_opcode == ZEND_JMPNZ) { - //| jg =>target_label - dasm_put(Dst, 4724, target_label); -#line 15343 "/home/jakub/prog/php/83/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, 8373, IS_FALSE); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 15351 "/home/jakub/prog/php/83/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, 2735, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } - } else if (!IS_SIGNED_32BIT(zv)) { - dasm_put(Dst, 1768, (ZREG_R0), (unsigned int)(((uintptr_t)zv)), (unsigned int)((((uintptr_t)zv))>>32)); - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); - } else { - dasm_put(Dst, 2028, (dst_reg-ZREG_XMM0), (ZREG_R0), 0); - } - } else { - if (CAN_USE_AVX()) { - dasm_put(Dst, 1978, (dst_reg-ZREG_XMM0), ((uint32_t)(uintptr_t)zv)); - } else { - dasm_put(Dst, 1988, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 2735, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 2747, (dst_reg-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(zv))) { - dasm_put(Dst, 1768, (ZREG_R0), (unsigned int)(Z_LVAL_P(zv)), (unsigned int)((Z_LVAL_P(zv))>>32)); - } else { - dasm_put(Dst, 1775, (ZREG_R0), Z_LVAL_P(zv)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 2756, (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, 2780, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (dst_reg-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (dst_reg-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1760, (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, 1768, (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, 1768, (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, 1782, (ZREG_R0), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } - } - } else { - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1775, (Z_REG(res_addr)), Z_LVAL_P(zv)); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 3894, (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, 1684, (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<>32)); - } else { - dasm_put(Dst, 3918, Z_LVAL_P(zv)); - } -#line 15367 "/home/jakub/prog/php/83/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, 1782, (Z_REG(op1_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(op1_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(op1_addr))); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(op1_addr)), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_FCARG1), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(op1_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(op1_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(op1_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(op1_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(op1_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(op1_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(op1_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(op1_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_FCARG1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(op1_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_FCARG1), (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(op1_info); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 15373 "/home/jakub/prog/php/83/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, 2408); - } - dasm_put(Dst, 8383); - } -#line 15375 "/home/jakub/prog/php/83/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, 8389, opline->result.var + offsetof(zval, u2.fe_pos)); -#line 15379 "/home/jakub/prog/php/83/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, uint8_t 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, 146, (ptrdiff_t)(exit_addr)); -#line 15392 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| jmp =>target_label - dasm_put(Dst, 1614, target_label); -#line 15395 "/home/jakub/prog/php/83/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, 4245, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); -#line 15402 "/home/jakub/prog/php/83/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, 1790, offsetof(zend_array, u.flags), HASH_FLAG_PACKED, (ptrdiff_t)(exit_addr)); -#line 15413 "/home/jakub/prog/php/83/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, 1799, offsetof(zend_array, u.flags), HASH_FLAG_PACKED, (ptrdiff_t)(exit_addr)); -#line 15416 "/home/jakub/prog/php/83/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, 8398, opline->op1.var + offsetof(zval, u2.fe_pos)); -#line 15421 "/home/jakub/prog/php/83/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, 8403, offsetof(zend_array, u.flags), HASH_FLAG_PACKED); -#line 15426 "/home/jakub/prog/php/83/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, 8413, offsetof(zend_array, arData), offsetof(zend_array, nNumUsed)); -#line 15442 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (exit_addr) { - if (exit_opcode == ZEND_JMP) { - //| jbe &exit_addr - dasm_put(Dst, 3670, (ptrdiff_t)(exit_addr)); -#line 15445 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jbe >3 - dasm_put(Dst, 8429); -#line 15447 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| jbe =>target_label - dasm_put(Dst, 4764, target_label); -#line 15450 "/home/jakub/prog/php/83/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, 8434); -#line 15455 "/home/jakub/prog/php/83/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, 8215, offsetof(zval, u1.v.type), IS_UNDEF); -#line 15457 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| IF_NOT_Z_TYPE FCARG2a, IS_UNDEF, &exit_addr - dasm_put(Dst, 1743, offsetof(zval, u1.v.type), IS_UNDEF, (ptrdiff_t)(exit_addr)); -#line 15459 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| // p++; - //| add FCARG2a, sizeof(Bucket) - //| jmp <1 - dasm_put(Dst, 8438, sizeof(Bucket)); -#line 15463 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (MAY_BE_PACKED(op1_info)) { - //|2: - dasm_put(Dst, 2065); -#line 15465 "/home/jakub/prog/php/83/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, 8447, offsetof(zend_array, arPacked), offsetof(zend_array, nNumUsed)); -#line 15478 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (exit_addr) { - if (exit_opcode == ZEND_JMP) { - //| jbe &exit_addr - dasm_put(Dst, 3670, (ptrdiff_t)(exit_addr)); -#line 15481 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jbe >4 - dasm_put(Dst, 8463); -#line 15483 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //| jbe =>target_label - dasm_put(Dst, 4764, target_label); -#line 15486 "/home/jakub/prog/php/83/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, 8434); -#line 15491 "/home/jakub/prog/php/83/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, 8468, offsetof(zval, u1.v.type), IS_UNDEF); -#line 15493 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| IF_NOT_Z_TYPE FCARG2a, IS_UNDEF, &exit_addr - dasm_put(Dst, 1743, offsetof(zval, u1.v.type), IS_UNDEF, (ptrdiff_t)(exit_addr)); -#line 15495 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| // p++; - //| add FCARG2a, sizeof(zval) - //| jmp <1 - dasm_put(Dst, 8438, sizeof(zval)); -#line 15499 "/home/jakub/prog/php/83/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, 8477, opline->op1.var + offsetof(zval, u2.fe_pos)); -#line 15514 "/home/jakub/prog/php/83/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, 8484, offsetof(Bucket, key)); -#line 15520 "/home/jakub/prog/php/83/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, 8494, offsetof(Bucket, key)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 15525 "/home/jakub/prog/php/83/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, 8499, (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 15528 "/home/jakub/prog/php/83/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, 8516, (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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_STRING_EX); -#line 15532 "/home/jakub/prog/php/83/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, 4044); -#line 15536 "/home/jakub/prog/php/83/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, 8494, offsetof(Bucket, h)); - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 2306, (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } -#line 15542 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); -#line 15543 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (MAY_BE_PACKED(op1_info)) { - //| jmp >3 - dasm_put(Dst, 3991); -#line 15545 "/home/jakub/prog/php/83/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, 8534, opline->op1.var + offsetof(zval, u2.fe_pos)); - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 2306, (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 2312, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } -#line 15554 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_LONG); -#line 15555 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|3: - dasm_put(Dst, 333); -#line 15557 "/home/jakub/prog/php/83/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, 8545, opline->op1.var + offsetof(zval, u2.fe_pos)); -#line 15562 "/home/jakub/prog/php/83/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, 1782, (Z_REG(val_addr)), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(var_addr)), (Z_REG(var_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(var_addr)), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_FCARG1), (ZREG_FCARG1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(val_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_FCARG1), Z_LVAL_P(Z_ZV(val_addr))); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(val_addr)), (ZREG_FCARG1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(var_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_FCARG1), (Z_REG(var_addr))); - } else { - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(val_addr)-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(var_addr)-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(var_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(var_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(val_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(val_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(val_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(val_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(val_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(val_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(val_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(var_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_FCARG1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_FCARG1), (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_FCARG1), (Z_REG(val_addr)), Z_OFFSET(val_addr)); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(val_info); - ZEND_ASSERT(Z_MODE(var_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval,u1.type_info)); - } -#line 15583 "/home/jakub/prog/php/83/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, 2408); - } - dasm_put(Dst, 8383); - } -#line 15584 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else { - //|3: - //|4: - dasm_put(Dst, 8554); -#line 15588 "/home/jakub/prog/php/83/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, 8559, Dt1(->run_time_cache), opline->extended_value); -#line 15610 "/home/jakub/prog/php/83/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, 8575, CACHE_SPECIAL); -#line 15614 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //|8: - dasm_put(Dst, 4331); -#line 15616 "/home/jakub/prog/php/83/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; - - uint8_t 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, 5903, (Z_REG(const_addr)), Z_OFFSET(const_addr)+offsetof(zval, u1.v.type), type, (ptrdiff_t)(exit_addr)); -#line 15638 "/home/jakub/prog/php/83/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 15640 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| IF_NOT_TYPE dl, type, &exit_addr - dasm_put(Dst, 7236, (Z_REG(const_addr)), Z_OFFSET(const_addr)+offsetof(zval,u1.type_info), type, (ptrdiff_t)(exit_addr)); -#line 15641 "/home/jakub/prog/php/83/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, 1782, (Z_REG(const_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(const_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(const_addr))); - } - } - } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R1), (ZREG_R1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(const_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R1), Z_LVAL_P(Z_ZV(const_addr))); - } - } - } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(const_addr)), (ZREG_R1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R1), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(const_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(const_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(const_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(const_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(const_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(const_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(const_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)), Z_OFFSET(const_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(const_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(const_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(const_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(const_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(const_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(const_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(const_addr)), Z_OFFSET(const_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R1), (Z_REG(const_addr)), Z_OFFSET(const_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(const_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R1), (Z_REG(const_addr)), Z_OFFSET(const_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } - } -#line 15643 "/home/jakub/prog/php/83/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, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), type); -#line 15646 "/home/jakub/prog/php/83/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 15651 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| TRY_ADDREF res_info, dh, r1 - dasm_put(Dst, 7123, (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, 4107); - } - dasm_put(Dst, 2199); - } -#line 15652 "/home/jakub/prog/php/83/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, 1782, (Z_REG(const_addr)), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1760, (Z_REG(res_addr)), (Z_REG(res_addr))); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(const_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (Z_REG(res_addr)), Z_LVAL_P(Z_ZV(const_addr))); - } - } - } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (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, 1760, (ZREG_R1), (ZREG_R1)); - } else { - if (!IS_SIGNED_32BIT(Z_LVAL_P(Z_ZV(const_addr)))) { - dasm_put(Dst, 1768, (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, 1775, (ZREG_R1), Z_LVAL_P(Z_ZV(const_addr))); - } - } - } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { - dasm_put(Dst, 1674, (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, 1782, (Z_REG(const_addr)), (ZREG_R1)); - } - } else { - ZEND_UNREACHABLE(); - } - if (Z_MODE(res_addr) == IS_REG) { - dasm_put(Dst, 1782, (ZREG_R1), (Z_REG(res_addr))); - } else { - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (Z_REG(const_addr)-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1978, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(const_addr)); - } else { - dasm_put(Dst, 1988, (Z_REG(res_addr)-ZREG_XMM0), Z_ZV(const_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(const_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(const_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(const_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(const_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (Z_REG(res_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (Z_REG(res_addr)-ZREG_XMM0)); - } - } - } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)), Z_OFFSET(const_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1978, (ZREG_XMM0-ZREG_XMM0), Z_ZV(const_addr)); - } else { - dasm_put(Dst, 1988, (ZREG_XMM0-ZREG_XMM0), Z_ZV(const_addr)); - } - } else { - if (IS_SIGNED_32BIT(Z_ZV(const_addr))) { - dasm_put(Dst, 56, ((ptrdiff_t)Z_ZV(const_addr))); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)Z_ZV(const_addr))), (unsigned int)((((ptrdiff_t)Z_ZV(const_addr)))>>32)); - } - if (CAN_USE_AVX()) { - dasm_put(Dst, 1999, (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 2007, (ZREG_XMM0-ZREG_XMM0)); - } - } - } else if (Z_MODE(const_addr) == IS_MEM_ZVAL) { - if (CAN_USE_AVX()) { - dasm_put(Dst, 2016, (ZREG_XMM0-ZREG_XMM0), (Z_REG(const_addr)), Z_OFFSET(const_addr)); - } else { - dasm_put(Dst, 2028, (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, 1933, (ZREG_XMM0-ZREG_XMM0), (Z_REG(const_addr)-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1933, (Z_REG(res_addr)-ZREG_XMM0), (ZREG_XMM0-ZREG_XMM0)); - } else { - dasm_put(Dst, 1943, (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, 1952, (ZREG_XMM0-ZREG_XMM0), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - dasm_put(Dst, 1965, (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, 1674, (ZREG_R1), (Z_REG(const_addr)), Z_OFFSET(const_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (ZREG_R1), (Z_REG(res_addr)), Z_OFFSET(res_addr)); - } else { - ZEND_ASSERT(Z_MODE(const_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1674, (ZREG_R1), (Z_REG(const_addr)), Z_OFFSET(const_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1923, (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))) { - uint8_t type = concrete_type(MAY_BE_ANY); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (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, 2205, (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, 2215, (ZREG_R0), (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); - } -#line 15656 "/home/jakub/prog/php/83/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, 2408); - } - dasm_put(Dst, 2199); - } -#line 15657 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - - //|.cold_code - dasm_put(Dst, 276); -#line 15660 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //|9: - //| // SAVE_OPLINE(); - //| SET_EX_OPLINE opline, r0 - dasm_put(Dst, 4230); - 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, 313, Dt1(->opline), ((ptrdiff_t)opline)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)opline)), (unsigned int)((((ptrdiff_t)opline))>>32), Dt1(->opline)); - } - if (!GCC_GLOBAL_REGS) { - zend_jit_reset_last_valid_opline(); - } - } -#line 15663 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)zv)); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)zv)), (unsigned int)((((ptrdiff_t)zv))>>32)); - } -#line 15665 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov FCARG2a, opline->op1.num - //| EXT_CALL zend_jit_get_constant, r0 - dasm_put(Dst, 751, opline->op1.num); - if (MAY_USE_32BIT_ADDR(zend_jit_get_constant)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_get_constant)); - } else { - if (IS_SIGNED_32BIT(zend_jit_get_constant)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_get_constant)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_get_constant)), (unsigned int)((((ptrdiff_t)zend_jit_get_constant))>>32)); - } - dasm_put(Dst, 66); - } -#line 15667 "/home/jakub/prog/php/83/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, 8583); -#line 15672 "/home/jakub/prog/php/83/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, uint8_t 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, 798, ((ptrdiff_t)ht)); - } else { - dasm_put(Dst, 803, (unsigned int)(((ptrdiff_t)ht)), (unsigned int)((((ptrdiff_t)ht))>>32)); - } -#line 15686 "/home/jakub/prog/php/83/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 15688 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| EXT_CALL zend_hash_find, r0 - dasm_put(Dst, 8207, (Z_REG(op1_addr)), Z_OFFSET(op1_addr)); - if (MAY_USE_32BIT_ADDR(zend_hash_find)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_hash_find)); - } else { - if (IS_SIGNED_32BIT(zend_hash_find)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_find)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_find)), (unsigned int)((((ptrdiff_t)zend_hash_find))>>32)); - } - dasm_put(Dst, 66); - } -#line 15689 "/home/jakub/prog/php/83/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, 751, ((ptrdiff_t)str)); - } else { - dasm_put(Dst, 756, (unsigned int)(((ptrdiff_t)str)), (unsigned int)((((ptrdiff_t)str))>>32)); - } -#line 15692 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_hash_find_known_hash)); - } else { - if (IS_SIGNED_32BIT(zend_hash_find_known_hash)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_hash_find_known_hash)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_hash_find_known_hash)), (unsigned int)((((ptrdiff_t)zend_hash_find_known_hash))>>32)); - } - dasm_put(Dst, 66); - } -#line 15693 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - //| test r0, r0 - dasm_put(Dst, 3655); -#line 15695 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - if (exit_addr) { - if (smart_branch_opcode == ZEND_JMPZ) { - //| jz &exit_addr - dasm_put(Dst, 1795, (ptrdiff_t)(exit_addr)); -#line 15698 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else { - //| jnz &exit_addr - dasm_put(Dst, 1593, (ptrdiff_t)(exit_addr)); -#line 15700 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } - } else if (smart_branch_opcode) { - if (smart_branch_opcode == ZEND_JMPZ) { - //| jz =>target_label - dasm_put(Dst, 4700, target_label); -#line 15704 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - } else if (smart_branch_opcode == ZEND_JMPNZ) { - //| jnz =>target_label - dasm_put(Dst, 1908, target_label); -#line 15706 "/home/jakub/prog/php/83/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, 8596, IS_FALSE); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 4692, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info)); -#line 15714 "/home/jakub/prog/php/83/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, 313, offset, ((ptrdiff_t)str)); - } else { - dasm_put(Dst, 319, (unsigned int)(((ptrdiff_t)str)), (unsigned int)((((ptrdiff_t)str))>>32), offset); - } -#line 15734 "/home/jakub/prog/php/83/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 15740 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| mov aword [FP + offset], r1 - dasm_put(Dst, 8606, (Z_REG(op2_addr)), Z_OFFSET(op2_addr), offset); -#line 15741 "/home/jakub/prog/php/83/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 15743 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| TRY_ADDREF op2_info, ah, r1 - dasm_put(Dst, 8618, (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, 2408); - } - dasm_put(Dst, 2199); - } -#line 15744 "/home/jakub/prog/php/83/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, 8626, opline->op1.var, opline->extended_value); - if (MAY_USE_32BIT_ADDR(zend_jit_rope_end)) { - dasm_put(Dst, 53, (ptrdiff_t)(zend_jit_rope_end)); - } else { - if (IS_SIGNED_32BIT(zend_jit_rope_end)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_rope_end)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_rope_end)), (unsigned int)((((ptrdiff_t)zend_jit_rope_end))>>32)); - } - dasm_put(Dst, 66); - } -#line 15753 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_PTR res_addr, r0 - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); -#line 15754 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| SET_ZVAL_TYPE_INFO res_addr, IS_STRING_EX - dasm_put(Dst, 2312, (Z_REG(res_addr)), Z_OFFSET(res_addr)); - ZEND_ASSERT(Z_MODE(res_addr) == IS_MEM_ZVAL); - dasm_put(Dst, 1684, (Z_REG(res_addr)), Z_OFFSET(res_addr)+offsetof(zval,u1.type_info), IS_STRING_EX); -#line 15755 "/home/jakub/prog/php/83/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, 4162, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), IS_REFERENCE, (ptrdiff_t)(exit_addr)); -#line 15769 "/home/jakub/prog/php/83/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, 5903, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), IS_REFERENCE, (ptrdiff_t)(exit_addr)); -#line 15790 "/home/jakub/prog/php/83/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, 798, ((ptrdiff_t)Z_ZV(var_addr))); - } else { - dasm_put(Dst, 803, (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, 2341, (Z_REG(var_addr)), Z_OFFSET(var_addr)); - } else { - dasm_put(Dst, 2349, (Z_REG(var_addr))); - } - } else { - ZEND_UNREACHABLE(); - } -#line 15795 "/home/jakub/prog/php/83/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, 53, (ptrdiff_t)(zend_jit_unref_helper)); - } else { - if (IS_SIGNED_32BIT(zend_jit_unref_helper)) { - dasm_put(Dst, 56, ((ptrdiff_t)zend_jit_unref_helper)); - } else { - dasm_put(Dst, 61, (unsigned int)(((ptrdiff_t)zend_jit_unref_helper)), (unsigned int)((((ptrdiff_t)zend_jit_unref_helper))>>32)); - } - dasm_put(Dst, 66); - } -#line 15797 "/home/jakub/prog/php/83/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, 4245, (Z_REG(var_addr)), Z_OFFSET(var_addr)); -#line 15799 "/home/jakub/prog/php/83/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, 5903, (Z_REG(var_addr)), Z_OFFSET(var_addr)+offsetof(zval, u1.v.type), var_type, (ptrdiff_t)(exit_addr)); -#line 15810 "/home/jakub/prog/php/83/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 15845 "/home/jakub/prog/php/83/ext/opcache/jit/zend_jit_x86.dasc" - //| GET_ZVAL_PTR FCARG1a, var_addr - dasm_put(Dst, 5903, (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, 4245, (Z_REG(var_addr)), Z_OFFSET(var_addr)); -#line 15846 "/home/jakub/prog/php/83/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, 4245, (Z_REG(var_addr)), Z_OFFSET(var_addr)); -#line 15855 "/home/jakub/prog/php/83/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, 2248); -#line 15857 "/home/jakub/prog/php/83/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, 8633, offsetof(zval, u1.v.type), var_type, (ptrdiff_t)(exit_addr)); -#line 15877 "/home/jakub/prog/php/83/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, uint8_t 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: - */ diff --git a/ext/opcache/minilua b/ext/opcache/minilua deleted file mode 100755 index 67520058957cc30afb842ea474befd116b3510df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192768 zcmeFaeVklXkvHCxOp-|;^dO0hfY9M}A}mBF{atb_mF^PBFQ z{+{~crd(62HYE5v6ju87*VgxLl%rf;=|9u$p=(WjqxD0Zk-z;_EeM6)yzJ%=U2^f8 zm)&&!vYT&9tUZ5i`z7aJa`6SLR$OqAut2_82X*S|cXqHlGK3j1N?%Md_k4ctftN1$ z)fa!V`h(M-es03Idp|X>DfD?ugLM*z|5)C3vAw6t5=YwK@Ws%khUPJZDJP*&>l^Pr z<>@6)E${4D)I9T0+L{cDkNEd<5PIDRXee|LuzK(fqrl%i3Y}wsAHiSn-2tfAc8t?~Fp{y`#V{9fi(Qqu}2)3jE`v&{;kTJTVIVz$o+|7zN%x3Z0im!5Noc_}*UejS(~^}-K78}4?jl?q;l)b0vvXNu z)zZ+CwKsQ%R&}ks`L^!PQ0I!SCAWoEb+5c_ao6o256X*gU9foRtqVFA-MlQca>=4) z%T_D~!c8~d7Fxb!`QoK3iQV;~mA8hvS1enxW{KQ)ued4Hxnu?CeRxUtDq<`H*~D$Q zW8syHS9RS6>PuFxyluq-5M0!K^9rT6ybE*^U0tBFc-fLgD}fS1dp~>&9xPb3q?^B} zeMO=h36PNQfoGFJJ+ndxqAu0i*AzgXk@1m5D2VYw4n3m+ZHXm`J+YSCW$o&%(4{fv ze;iTmb)#I3bMGzO{<75gI!`CKFs0k%xo^NVR8(RCj>(CWZk`wlO$hx8z-HX1KKaiW zwi`n)5()nr5HVbjUq0i%6K=kFGNZAV4F0DCe|%`z+)t6`<3f{QMl5rp+>Z@SG51>E z7^#o+Y@BK1yG=B7{L7p8)54<$UI@UyX5!mo0R9aFuLR(a8hAAT&)7KmpZ)fqHSneY z{3!!(4#1x?@Rk7F)*A`He`)Yr1Mq_e-WGtrXyDNR{IL_1Zzll%u7Sq`@W%~&egMAT zz!wJKKQ!>A0r)cp-W7oV)WFvU;0FwRQvhz|wlx4R82r8f{MQD)Jpli$f$s>wt)A=* zz=sU}t^mAZ;Qayk9}PScfd9$B2Ltd1Dn9<@0`Tz$o)5r}G4MhFe!PJf1Mm|Kyb^$) zWZ=~R{8R%EecG?*(+s>R06){fn*;E347?=(f0Kbn0`RvOcxwRuHUn=9z^^p$XaL?B zF?t?=ryf#=6%W9d8~phJ_^byMe_;T=%HS^zz-JixT>q!Z2EQ7BPxx1*AKC8L^E;;LeQN-I z-nSLMEdc+R!EX=1v)@$wXaJrv_)Y-+o&Tfw@c_Kf;Li`huidTqT>SU-?hWXhX>U^i ze&mOW9|^#1f3*hSw!hi}aNA$)0r)pfe?e$eP?O^6$9|O zKQa0cfd9bYR|D|xoBV9(KEFOZW$>E<@GHtnzc~PZ*5J1U;P+OI{siE^F!-$j_^kg@ z{I&r6d4t~`fS>pW#g7Kyzcu(y06ys%#g7NzLk53-0DhBc@4^85kilOXfPe5grQa2R z|F^+k8-Nd){@oOS|H2JpKa~~@ON^8hkwlhc&ov0 z3Bd0%_>lnoe1qQ_fM*PTTL6BM!EX=1&kre|(E$7sgYN|3_Zj?n0Dh^#pC5ovXi)kK z1Mt}fe`x@|#Nc-Y;MW-ZwE_6!27glk{%(W6H2|MBM)~Orz&i~7_5ggN!QT;pzu(~R z48VVB@OK5^3k-gL0Pc)cehLBjT}D5P0r;kK6u%OHTmN4T!2i?4bs@8!Wb*)NL#HVK z?=$e`0Q{c~yd?nttbs=Y@Glv7YXH8}z}o`wuN!!K0RC+Qj|Sko4crO9GX@?Hz`t+c z^8@fF418e#{;YvF?NE7Jx!L>t7ZlF58ChQxs}6+<9yr&5?7yN1ezFDPx8i}H=Ydx} z@C!X~n^$F>%sbhCHh)U^MHYx(n?EJ|Egtx$&ny2E05cv;o^JKP6+;X4dEj=fi%+(D z;9S?T|8{ubvVLVA?DW7{xBa)v1Glo~vwja82{!j%#sjxYseCx-fpbmD{>ypb$66qM z^By=7a_+x^2Y#Fj4TXvxxLLB4rxg#}=J@!a>VY5cp%XIwOBs0c>rEc`2_F1r4}7Wz z-r|A3-UE+#;3sk9**!df@Xt@Y6i- zg&ugs17GTaPxHXLJn+*!@U3q0_g2mWRc{I$#1B=DL9UX#FU5_nAl zuSwuF3A`qO*CgweKJ`yda;V8kkNf$GF(IcX(>-Q5=Op(vaYtt; zG(2O@ZDT@*hR^y3{De;n5q~Kk94b9OJUrYd_e>leDn0GqGhuY7G~nJdQFN&EP4}J& zqC=%Gy7x><9V&g&y=S86Q0Y$hp2?9zrH{DxObi_=EpqRf5IR(Pw|mb-(4o>5?mZJg zhe{W^_e}g8Dou0mneaJOI^Ml!qUTVl!M$gK=TPYnf3@vpVh8Pa@0rj+``vpca?pPF zo(UYZ-@Ru-5bbyGnaDx=-Fqf*(0=!xi5s-vy=TG(?RW2)s6qSPdnRbme)pbjU?R z!2R;T{gS}_je+})!2P_yeJpT4D{w!&kW!nObIW_9fohYR7;Ho-bVkDFiMPZaza zWB4=uuTHAs4E*kLXP`RPY1r>P{nzd(An<)dplP_!DRyMb)BkUp^%p!2CC=?|lC!?V zODFZ4?qi+wtbf5x@%AIb!^NB6O!trb3GN$iL|M0fmM^WrLtb>C90sGPlUiSNQi+0- z>c~5(dAX}nu_x!I=4G68ET3*p$DT|L43ti57<{@qbMLxy1sa+edvarolkOlA3jfqe zW&7FCVsT9<#3Hf7WjqIgP(ubc$@PcFZk&*f9p+$^#(k#2Sv=@uGw>S2yIInCIgxW_ z4y<`Io;ur|@Hb*PCpDlX-21&w8hlEX*9SL4HpcQ}~S?X-KXg3a=^SzZ2Gs!=v)lbnFP8_fGjf(TQAanwY!M6$MBE z2#re?PD=rG{gF_@792_zCiKReNTJw}8hG}Fl)oT&K!**Nn^1An!1AG{JJ$~lqn0(l z2T7-Q>SwS~Bm78XbNG=QXf${Vi||v43Y(XXBLa$5($S`wd%Guz=u4jg6?qnIN>;~q zPs4vUu1Z$Nba&uC8*fIWG$C1S=)SQ0LB5O=D&I!rL*Zr?s^GV&Gkn27_%j(%Cb^F7 z4L_18ze9+!qbljp%)Q}HWe9B})JY52NyBpOgA+%2P!k_a1}dN?bCZ*9Jd5Kab>hN| z)7!!J8G|Tp_@Ck7PA9w}1I;KnsWIfinHei4Oq0K*O|FC=30=0f`xrjv<^04IPVYP+ zw41SylX{98ll#-~FapN46An4yH)YCGsWDH#m@G6n6ZaCd_fU8~YKj#Og^w4ZfY#8!IMfHjY1d6Z@7@pWAWRNZ13v5yLc?Ef_jr$FP5=aS(PbpQi z(IznzDIafl=}h12q!2Dwn>VU8Q4>h?^N8VGq~18Y6`c@o?(_1sZxgz0J3L(s_#B zQ~)!c*C&s(fsNY0er;fXt$`>j4OAM_eGS~c$2Rc0>Mj&X8;F)jL%~a?fxWmVldPT< z-ux0q1YX?T0Opd_RpD(_fh-Q+{d-;%7ejvGEx*Qf3K~152TkJ$whw!V(v4%_YkQ~m z;~M(#_F?wX)-=exdCi%;1hW(_Kq%XgLzit$zpi%<%(-K0YEl`47jdFZPOl>{C&gzF zU2G>rwlkDC1~t8t)Coy<;1AN1@uRpKV?k*Z*wPAKRh{Y3)>v+T>}fQt16;awyq9%^ zwGI_#DmM84q`pHiN)Q?});EYA=0r^DekDEp?-;-o8TR7o;nE`Lfcqd7Vt-(}pCGed6vD{gBuq*sXv|(%P>HV>1f+}$( z@cNRm`{{USOJks#eWmdj=lUQ%{JF~W2JxD-b}<6#Pm7}#J5X)xjSr_|_xCytETKl< zf}v5$!w052?spbH;|#pe=)C+39pd6;#0oA^(Md`(Oawb>z7qEd`%92sXNE`m4O3T%Dq;NE`!AZt2Tqc+2n}iIM`0l@6*& zfb|(WFn=JtK$bBWlOK*|6{(n<{{^=`iH!x1Od)(QJO-4d^GwC4EU?V!2} z1{+hQNF$-r_}?&HJ|V#Nos`TgZFpxkbo!0^qhmsz0rx$K1X|IH`D|{~#wR9YLky*x!=HE`I=Zh9S-I8^_`*KX z$yDN?s-)FF>Ev$g7BhNO#qfvd>1+xw{78IKI(AToaYWOiH{#Ae zOK}xH)o}n13!s*)j$`mUq5FjL=>*YDz@xCf@|%NzQvoRAG33-yNMGBe!Z`&(&IyCb z_0>=}U7{eRQ3*wtzAi`6Rn1WR0Ia<{0m8o(8~wd8l-i|{0a}Jxg0p>~(3s4$JBxEd zHTATF;CrO|(5(-;CN@vZY&Y|b#%%xRJ!*6Nqm$Ubcn+zi;w_+@qM)i<;|z=INN5BL zW0RS-(O5Y9C@ie5u>h&oXQ3>!f^^406=tK8g-Wq~;1kxL>NtoFXK(o#h1Fu307*Z_ zDS}@r|D@KB78|KBi)y6u>uXgi@GLFDk_LLfjW)vxu;LMQQEebP%%R0h(ETa)Fid9L zcA*?Al&{4-Tm>{|W-OQBc!~K&oOS_4jYg7{vD4sGGReYN%(fWH;c;{#z|t2L*a%^z zpKART)KCBbf0D?4gT1Ct^Hj7tg}Zzm5%h_@Q{u7e{%F%A{3;&>tq`5h3h^8voQeQ- zH48|l_qgMXfsmrp+egQ&4@GQfeP6x?iYO_u3ly>_B;cZXG~K2O)R4f#wJoL)yP-vD zPG1Wt$0L0{C((?K08N?bs<7#wlY3j7nK@=@ARHLQr#P0R1*!TNm<;XKS!A~O(ci=Q zco@+H%^)adPthMSl5_eTyWO3{k)q?==hDloz8o zsAY>)WTNF-eGD1_IKvVhC)po>y-o#R(YbszB~yBgZz5RGVTk0buhwsy#%<$UT34=-WI&BcInv5{n0KVi$d)+*hd7mKf2QVuCh4nZMn`y zZ?Kmr3b$*)3u~7**-KzV?X^!ZKBY@X<1)tT#7-=+3kn-kMPm=Y{=cM$k${=+8I2V) z;=>#ovY2y$2}dt8TN-#5`qxA9aToEr5tX<4Fz%;Tm^kCrKDnSw1dgSavxaQ2~&8%}{% z#J~D>-X|656g5vnuP0#mpLFzwS&?^!LK_?uC}Pq?J-{#2bGoECnDkEVb^3qwr2a$F zcQ0gn=lUb3qL@kXkOD>fE6k?-6^YWP5{H%7cwBx{QVV#GqBc=caM)r{^jCe}XE-g9 zRwCS(Cq#5Aak;v`YWUIkhltRbiZA5v{^$~oQNYY(ao-S8cGE5hn*W4WcGFJ1J1VP! z#I;}1clbjVN+W08m$QTv2Cv)Xrhs<+b{G@P!w?vlK>#Tg%JAg+)9D~Wu(t4N(-6oa zg0XPBrJc$SKO^ra7QYLUZi4*IA-<9@Vp`dRrg~om{sn(B#&R20~I zkKCpD*fytEpP@PI%Cmo?)gowmqm#aeHMq2N0x1m`ei{$GG?kdRDSrmCHr44e|4s?hTO;$y{5{l|K?Eu4+a5cI9;P5(>LJ*#FkOdwnj9~_Hpa3Ug zSiYgoBbp1jk86e5;v0P2AAl|z?gazeK-`#(4GP_xIcj>e7TFu(R$N?9byO+9@mGJ8t3wK-CaX!t z2EpMVIot+MfTg_)MyUY0L*3)_1KBM(g4At^GeHj}2FbL~boXQUwU1VR%g*f5wmG&6l|8+dL(Armcz zd;Vmyiol5gzoG>F0>LN+#a{)*rw`qZ1;&k>ARAzgMU<;wYf>2%$=Ki#2ys_p1+N3h zOiVYUE-47qW*D#8Y}fv$!l>P`(lXHj<;xNjR=2lRx;u?SG zChb>V=hRqm$wsn7ilTmZ1hZ;D=*&Gd8&L1(q^$7J-QqES;%6-;XElE;UvESy4Qbn6-Zocbw7ZPS6;W=(g2< zAzcQ9zbPad14$Us>wu>6!XpF=YFZd+*d~DZ8^ zE&ouv+FcPQm5Ln@CDU3dz%m7s5hh_e+HIuN2>p7Wxbg|b8+?Xm;`L?Gg| z!h&2!yI|KVj}-vQUU6A)9u`MK^Jpjxm;E{~GdD$jjpe0zsTgf351QyYnQYqWpY}e} zQ%knSp4W#moibgBG9A#YKF+X2Wn_;HNNCHhM0-;RV%HzULi}e1N2*b65D!&FG5oQJ z=;v1?PtZ|K&toW@S32)v8WMNmM>}3Hb3Jk!2dtQ6*G{XzD-7#k_A)g%s+tzF?q0ErE%C_Y^jUta+Pf6Oq%BiYyi$Tn0~^8m4v zOO#hfB|Yzev-k&2asWA@tDeAypaaxxLo_opc3>Shkgz^FTy_KgV1weNxWhx%0R%&w zsbWs|#S(*VEb*Pg(o2e@4i60s<{lQ>NC2w1Gcaof1G~UT4!=9`TR}9MXUp(glwa|( zyHwl6;Wh)cAN)rt$>{@T(YgN`?Ahy`@pg$Ovc*4Qd}M4(aitS^7ID)-U;nwtGjFTF z#yBUvo@=|8*|pvKe&U~XAK9SaW)juBp*0gHOM{G074G)*qO2C!gqISN{077`e3yUc!O@Iyn*6i!H#{YINcgB zsOrt-2LC**4ax*~0+n~qo~#+079wyrkG#yV8P1kw)HPbxeic>$C_35y*Zg_2c5X&uL>&J05{Q zS@*`35H-DkndPyN|1@;97@>6Czzf=M!izCV)2s4G7%^hU_-sZl6Q-G@KV`pnHCH-W z#VlCF<=ho2cRIx^s^dLHX95+U(~CpCgAyC0;OAjCI`H>91I2M7XBApMT2U+`L2+Q9 zFfO&1zr`^om(c65E3p%4P`9x)Y$oM*oh0J2wpxd7#7SuR}a2M1HW__!CzSO7| zB-$PBSqp8ZgOwRbA_D|SDqH*@WaXu z#MT&oFzqi1QRI=H{ZA)_{2mqol7rYQIpCyn;#-}U|A0$x(y0N~?BA#J)Qj85hiinbj0 z^7a3MqDR~4)}fWsA!8F4@|t_$sD0c~%>SInP3zdw7ds5Ki&Z~*to(4B^kM9Rg>er1 zVtv0ELNP%bQTHUlEd93%D9`>|gQA*r4Q=4A0*sLD%m5w(%IK)l6M~CTLY$C9tzV<_ zwEjp#ACQ9k|5@=1>V3`wHau`kvU*HnKCW3k6l=p=!X3>PfFid!C)$OwgqEsjwC=w zA*D5;0`Z7*18n4qw#;QqQ)r!F3Yfd3xAukaUZ^eS{q)$r(hpsB9e5V73xDKy7K6fg zc(YmD17D+JnpDrAaH#=n4&uVS;c!rg-<%G{M0VMH9?J}hDN~!=-x=;K~ zwx!0C$iaW~i!Y!>Gh=A_6f|A3AwG+OMkaE2zXO5@Wn)$SIif$Z{R@jmkYlL)A-e_4 zE>AONNn^kHhD+){X^0&bXFc%ZX$?8NgAzNu;aCE=2zyw~0_6e5I|CR1o?Zgq58rOk z#S`)Q-gS2&z=HsC>5d}|G^;)fj<~@d^%;ix6!KT*?T8ICu_OuJqZ`|>?h7l$o1KR*|@IUN|+kTVQVPK7n{k87)xU^R&7Yah#@bO*pOojx4S#PB{7&wH`Rr9R2!ZU zVKs0NEke3O$@Rrk!=Ly7v;gvisC{B=hZsc_mz5%&~Q_^(hs+VVRB!O`u7j z2_ucix<73Yx40n|lQ0^%;tBb>rSLe!W=fLgFg);AfI7&Rm?{!64zevn9>w)+G{t_q z>AKL zzzsQ*QsNst(5g!@UxoxwrsDus$VQooD377U$wIMr>UlV~no*e%aS3@HIUVxcg7`B#;oehoXrB2K!|;ci5gG^3ktJxUU7E!gqsIru)@OrLE+4UA3zrKQTdgQ1!1B$6-!o8ex zOC3x{V_ba*!(DkLA)}0Q+_5+E8Q9>ITBc-X#YZ`qi9Jtv2tkbQ=IP&27;RX0S91MB z!|N^pA6CByIM47bprLNj^?rK9!l3D5x%)Ei(8ar`>&R>PG>H0#mUY)13Ppji7J*KJ z4Z)7osJS2kwUWUZ0R@fQ*S33*T*l)n(C{}}E_WYtx%)!5--WHK&0m6TV54LA>13}J zqSs+8jYOq4Niz`*@oPn!9Sh7BT=x|iI(bN(2|z_rh1kVr&nJZ=3i z3Q|%U^D7~l6yye%rZ8x*pL?0rFO%w7@wsxH8c+&OT3es)QCVb**Xzp{F=op2{W`p6 z*0nbFSj=s;wB;RMTnY1fFJs1T?z8<4{k;Ss&;y4lCin-BMlL6D^A+2Z>}2jM9YhJ+GtQA+bNcns>&vG;PpQY!F) zJ1`@_Tg*a<$vXHKmw{`P0dyMtCSL#OULo02+()5g)}P{fW-Oohtzb#YP|_jrVGO7t zpX-~P6#hTI$w|)v`RiMpl!HE=--1PC&=G9pg5BXQZ$g0bnIH)ghMYz8R-th`a40y$ z?!tb*2Jd-Yis*+Q<)rUzAO@rmlxHH8M|X2`!+*wwG-3+H_dSf*q!UiWVyUo^+~@dT zdjRWVXS&%PI7J4ddsi_CLE{0997-_~ zXYvQ>p2m$Ih4k?{$Jp-k$}3Q?2?a|JtBV0{NEc^NQo7}2=zHnY=4rhw#Sle3#5(X) zUV{GU8z8=c#0jz(h@897IS*k-8Q}z$*Qsj?d^h(2>yV2j4biEbiKk=mw%~KrE_f20 zzZ0LAs~<};Ge{w z6no!_Auwu?s5VSVAZIAAfb&;dKc20ZExn|0iiAAz zG){MX2eoFjO+T}HBYMZp-Y#v)Nn3K|x8hYfw4Cg{DaI1GI9}|_<|cY&jL6`TbzDD^ zF~YyI@s58RjWznw0B>koKbbQUFVwiZ|IcncFNn7X1};i5HRVudB*@_6|r{<)xAZCHa< z1piPhtdoRH*?3$>m z8-Bh6e(VO+Xaw=ad!)m1ns7W`xAmIlaT}9ITNy&2w0hDF^0pMB7oNdXXAh`xk-7{~ zI3l6AS%x62iQ`4FF<`>Dmd}SxxbDyb$TqQj%E8VFN(A~0r4JO2c;vVLM`CS?2 zNo8=Kw&}fj`VRloz8x+(gJ53LbBiza6`#;oZtOz_#-j@MUC%);gw2cEDUvUs;0`+BQWMc)iCj=NI zYIk)MOK;K6^yxxkJYInab-#{Gx?RsK?_@$ityp6AO>U@ZcyhVD0sbTjauCuarUROX z3PhZAU%RP@8nK5Pm>A}^aXtXVX)Lb&+2m=pscf5DnFM4^>LJh93PzxVqm;9%)C>%& zP@L7ALUhq{aj&@4$EkQ+*8CLFyHaK#5WkebEidD75P~9U|FK8IJ&$rYg}wN?UwVQe zM=hg>wor08%7K#OTBF>!lIF{PT!{cw^w$Ol8Msl4Y-Mgss?3|v#?yfUncMwkg0M%D z?~r$9A2S9rdYiei=mulB@MaV8AO>V;6z+LIIjyjr$xO?hTX_#6TfZ%x7QP4ZD^_J7 z2TE9RRvVm~{5Z@}hNxCUq3(CH4bs9Q+e@re*C7Jo4j#d$b|#)*Ryncy=B zXjRk-iLdVM%*%t94y}=l&W$K&g78Y$&8?jqR$b7@ajb*H=+fECVVsc?54J^O3?*=)n@ZLuoQw2DZ?s zz*+@*3ChYrg0P<(1ihN-YNg$|>Cv8d#@fA8)iqI_aT?UEHF{i(YZ+Tue-~# z@Bvf4-DSaURX`Is(!9lR6O{~?20Q|_hdu@HT$&q^X*(Q&8 z=<9gfYv=(=%nQ=1y3AD{}1+R2zro!rF92r*^YL(Iz&e16vCr9Ojh)4Qn z0Gsj5^71L{#Rc6WVWi7yiz^=~^Pa2mXdDJ?eJ*>lR{s{ARuOEC|9=y|lqE@K$YO5n9=oxB@+eh%#Nm1EdCPsvBF# zB1!2J)CiSB0l)Z*FIA!AW}S%Ea8w^UJY?GBOGvhI zo>rO~&{t6njtupmxU7=nKw;R27O(Y-~h_=UmYPB3>dZD9w-bKjlxDlASfOwBa^nF(!UDx;uo7PYtk9G z)4NsMih|j_FfAmAbqR-;=rd}hk~kwa1SON1h5$|Sg1s>!dBMJp<@8-w9j0=QolfhB zmk6tLXxA0EIW!ibn0O=Uo)B~Zw>bu#ZW4uBHVDapN$kby$%K2(Q#NyTCL3xxt}Jw+ z22M$lr1$ISgZh&NX3`>1GI(c=$&|sKk48M zuJIR*tAqw|J4m6sV7x;o^TrI8yW;5jP?_l+Q-o^}X8#!=p8dk6pK3q|T6%8K+vyp9 zrw^L>JlK&82R9O+0-281azkeWs@%J|AwhC;LsO7K7?G;kS48m^mZ1r}tPkCQybe z1KhzzbeIS>`>p$aJx=Vj)XC=tPHRiy5_Z1_-R4m3!a^}^v;PWZa5!#7(g>Mvf zE`tM;n>KvDUiE^k7J^oxWuC);a2=%~7`WqJs{#10`}vyqpadEwyb*O>}3m zdQfbcm=>7#cr<2Hp7P*yMPehj9_Dg6K^FgSJ13zk1-nky68zLnsEeOPBRxJ)RZ{6y zaPEUjPh1!~sOU&A%1KbT=XQAWztO1`l&R1(jOUl@{g~nkT+@YsNyZ*2@Tl$NqT4hk zTTg)XLB6CUdi6eKOo*MUHYeB1YlNeU?h=kdaMUEhiz!~wjer(XPt+C#;or4mh>&wx&9nLBD_)*3;fd>eU6N6*yLMT@C9XUeRCE{V(Fff(f_ z&Hli9pQ+{WD%83rUP3No`3nQ4AoS9RNG2t4DDtF#5+0X+=f%+h0!1BilQ*ZrNl>&| zDum{wW(%iiFn*a8lWhtjmTu(L3=7EB)MEjYQ1+6`LLWpSXQ`vkC|!Iv&j=A>M+`Bz z0cl6Fdeds!7BCgi8~?1A)J0 zZ5QmInkZ>xmo;#Xgc&_sqE6?9=MnCl0YHJi$u0)c<9gz0E)9F_*j7{PEs77-Qa~nL zH@Ok>{urK15&<~sG{6Q}h)2DP(}rv+w^d%=^RbWety)Jjt3Yv*BFOS8UZ=K*-Em-R zyva-5u8O+5gG4r7#>u2mbW*GYx5A^XMB@VtO5vVw8zrO6?7$T6`Mg3o8KJ0G80OqW zm61gO-C_qXn`cLT{=tjmo^*+j=SD4#ds5WlaOT^%QiTpnC+bXT^huGo6O%*DjPvY# z_A#Ce;omm-@@MHqD1+H?wguwRUnBTz^oAxQ2w0mus+;Voor1(JcR;H0SPp47e{HE+ zZBf>ijm|&cr7p_D(rCIcA}HyoO*JKp3tjV;(GkpIjz{Lx*P@*=?IjG;UhKt_M!81~ zDM>FnFtj4wQpc8?ih*_KUO7Yqyc|WGbp;_RTERpt&MMvgnA<)h-WroW+Z-2Bn&~2T z0?}Wmj;Ff0EN{%ci00v%&RgP&Ng9J;4wG4H9A$nt#9uoz^Bd1eM_2SUU#4$lgDgqV zgN)n3eo*5MluT$z^o;l@Psu$IDU>a?;=pX>25-weP`jQpRUBsC9&319cLOTP7GHRL zc$lj=$tNN@qeFY5oKE$CU;+(T z+3Wq$n*^4PF0Fy|v_DNt;&{_#T1d`|vq&%md)b+den<(AJU39@-e!fZ7Q5zfjAeO_ z{tTQcn3b`X1?xGrnkR+`==jB8ASuy+M={k`!DWkA^9*EzjwuvE8+!`3rJ(_kt8{s zTF9w{zmzlnbnc+$f%z)CNYoUsOgE7aOoKV0^o>(E`FkP@%b+{BQ0!e{^jK7JY2h2( zsW&Xzb$+t_poJu%?m(^0550#U*A9{NLG#L;Pw%r)ew)vzev`fQG=*+pgxPp3%62$A z-)9*n0yK>3=vtdfATwYGT!{+ERC}%ZXw-Azc6+gID0fO zNTcgoYonPN#ms1CMz_&@mTmvp2(qR9NDpJ4@oAAg+mC#Vw?#f%jW)>)eS88FT?SK8 zSObF`E@DmSXWXtIWfBgtJejb}wF$m5hjOymZp#B1f{NC@w=o9GT)yRvh#LhnMy%P= z`%od)g!!2(oMk1|GY2`V_>01Gv;;~V zFC@sFVQ|soCWUZ|I5LK9P~M5yvHtk72K}zV_i&-n;A|x)zkU}&KSW{ zsf+e3sCV!!O9l|N(2OrWo7u^rS;hHUPN;}JWw{K`n$XEjyfnu}3HfyNIvyAGRm&Wz zLcj8llRc1?l|>Vpf_(|}r5VNq><7VW$3^vGvC1WMv_yf=T; zF8DZ<1hw4(L&1?!^lHMjmCxxG0NSF(HHD-a|F6z3JMxwK3W+K*d-x>+GW5BWGQdFI*iv6!CMcrta%bK;W z%u%ehNkZ?qNEs?5pXw3o%!6nv_{=fJJrp;(5OpJ8^M%9^zKiFaK)Md3g zKFK;*wf9}t`?vVs;qaV7U{ZM4)8d!@mr8!=2cLhe_MEDUsY_-|_>pE-te2toy$LMd zV46&Y=$-L=r$_!5VQwSxXFpktf)}G17@|BLB}@)=p%1pB5Bh?lO2@W~e#lq;VmoQ0 z(k0^)Yf!)3yFp<_G?3iJW{o*jrkU6V$}Z*wEY0)@%U+I@!2oMua!woBF> z2KUGy1)f7YJm#)Wkh+87ute8!(a6mzFy2;d0zy%vhdglD4T`Vj*{!B~Od0>TSAhEp z2FC6$dl>T!jBaJUvVc6eTgE_LKt2c2KcBm6<)?qaZ#Q=i6=?OT?=r@5QV+|a{i*+t ze34F=N$dCLv^}LXxkQL;fHDxDEmLj-$rkytS|2bRw8(3@FD3(8(?4@p+ zyh(ikMhzC%UeqATn`prL1E(KwDQ227L+-ibMB;^J`O!odb%j+l!6-1WGD|S0NzcH8 zIndX*Uk_~ebL@4RDGrqqXH_u*N6a-?lX)T(5Ukqin490=!luLzBlA(9Qgg?m>evRl z`bG=~#naX_ad3%HPw0U39L2w^nWmN63ftgBivWRAwzvWoTHB6r5$?o0rN)e8)c+nT z1i!vm``&?LtO*UGz~l^GUSmw$8@`JxO-c{|euI?%HsaN<)hz(mQUMbkVVo z(1r%KL40cq#61m?@wZ(DK{V>V9yF?%l)*teoB4h~{0&3vz2yzx($N)mw9`<*i;-Ic zd1z_1-C41UC+Tc=b9}wy2C%}a!*{kg^-eJWgW`T^@AHBpU)nS3S)BKEV$$!J<(3cxpj zS?*Zk6qLXLd~3MHp|+jy0r3k`p#!eV=4DLtjfNATD_(;8HlexOIU=Sy?jGqCwxeBf zGmh=p&2*NTD~;);Ok&&9P9uLrH88BfS?tj9>>~?2V)%nNuvlMm{oSGNi_;xUsxiL^?oZ#vyO%Z?Uwg#C=ukUH8@*BLA|%-#XvQ5oWGXV-r@XV?BKIcnX!~Rp~hc zV4OEE2Ux+#;CT)+IyMrm4c@W|Xs{C(<&StP-5N7&8LpCVQNkuvLr2UqrKn8p<7;cz zSQs`ZTBB;Xnde0w{v=+6E(Ar2ILuIAD1c2zo%9&=9$1*fc?0$p(TWM4t&Z4r!mfo! zS;LR;>JnQbo(mL{)k(5pRxT$euG4z(R!a9ZHIjcziWa0_bfXK-Mvs_tH3$YO1p<`X zng&o9M}-K+;9)O;odb4U2}T{`H9>{f=zrD&A1O1s_dAb8#9p$+_idsUaF2zeV%{r{ z+#IGanP5^g#{V>7qhwU)wG{4M~&|N-L2Rg)Kv)kH+Fw8S-mm5 z?F|x>Ob%~;7M-80P7ZIIAduni<1mPXH-87<64UsS!om!qciffpO^*BBxPb30?iTON zV-kN{ycT*@`WQ6>9l@b#2+D-yYq$sVWdVA7=RpxIok~6D^@=+G8CiB_=lAhTbHZkL z^Bh!GVmL@P_HY{X-17_{lif6Q-ON2o-*wwem+RB1KZ?9x71yV@ zT$gTvuh826ZW%l!pW~(sN~ds~Exlg;+w4+CyDV$yJv{9UMzRR zeCKXb_vxjxOaax%-Wk~r^-cV^LurY9$g{EGxV~y0et{1i^YB$@qQgVJd}g>hyiLt& z(fa9Rck`E_RKhpSDp?&4Z{~I-F*GhCmmVOvxF}hj8s2g*u6^nLR`6@n{il$3N%zCQ za?gGVAARS`!JIgk_Ubj)-b;_@wd@4_s$Nef9EYC~9|t;yO8=$m%&+;-Uyb9XC&BI4sPh3y2EE;gx&m`2S$OCADvwvx15$Sz?R)!sR5ho; zVl+fD1L8gS99xNdV0_Sx{7BoYYr{_YD6b5Y3{8A4E%NHgU*nQjrI;Bz818vHCIi8` zzAdtRRo(H+A*%)|lPLU~WM2MSyN8K0p@DjI?wD1-g6TsYe+FoRK~Ua12JoJ)XG3^% z9Gh@?u`P^6nPm0t8{28UcQ^1Z(~zuQ9^Ud2QnNmLt-QNtuLp6h_L{7IAiSBo#!LH9 zK&pgc{Tj@behEWX9_l$yutxCgdJ{piEuql9vIr(G6G37A{O(Ep-0oP~{OYN9j-dX5 zaF01V4id~3hv6S|Uf>fXcU7-lsfqu*8-hNkp_vb}^m9n`RmvdqVo(N%V>TJO>`yr2 zk9cl}6Q3w8velvyZ<9vgh?k+z+K7JeN>xMk=#5~zpGI7|2!(((jAQseKnb62h*%T< z@w?Q-->wR8IxslxHsGW8>rg4!rdjCMS*-OTt44KWs8>Y&6E5}s7B=ktub$+kE=g-e zWSAQtN`Hney~-~BWzmYG|0FWJ^VO65xJ%N@@Y~7ooL5i%JePVuBkt168g9HAmH4^5 zbb}@PFis8^;ddC4=_U-nVh(BzoRF$DoM|x_6y$Ys_XBA*z3SiX z(GLCAcD3kC?~G5+Rjc|QtO`?ao*v`3~sAc&w5)%eT zi&`f2a~fQFFVJmE&E$7J#>jq7dP_4&m6M**n@RP=qfw18mC*f8;qvd7!q9K56iSbx z-s1hpMI5~$JkCKo%COH(g3A6!N#R3BqX30R0)a0v%NVjC++((+yCpZa0 zJ8;YGbA0EC+m`2`XBa!)%`cghG6u(iy_(aJn7QW>@?-F+A33?n^e~3@!sU3sG$AiZ zr9%V7@nl+9Qyg;_>>Zu$K5J~YHRu#m^ zB!w0k-cL34{O9R)_rqwx)V!gqQs}t##q_)(#C7R}lF+SC51}Y2lHD6U}>^)iUz(TP?(O{8~W_aX5rX){jyOJ_Rs>)zx8Sz5FQp^qCIyx zgoHC#504}EK;gKFoDQPX>Z!JGe>RR#Zi_;v_9EqW))ft*@FR_5HfL_fG2r^NEDpm%-n@qfhRc^3 zeN;bjRj!((f#-ugMRe2s6)>_(8RcpuXq%E@I#mom#1JA%LhFGC_2XqKltvy z>$CN(T?`f~&aQUK<%-ncV{9GGZ8rM?FylkK>TX`kQv()xM%%bK9>;i#gj5zV-4NEd z=fT0$thz>@hium;N{Zy*b2{V4YKS8X>;e|KBR&l5uoK~8=3UUw&J1^R>uG^gwBZEL z`zi2SHO=MO3Wa^R2OG7eQ@uWl#Ji5{3`iUUtVm`Ub1Y`L5q9 zmdwg^2UdS-PSoe)qUfmuM^^1Z2e^mtLs~g~c$r?VNEY zHgz3qKO4OG#=y8Owef=sN2?BJd@$ACO(xqlxi;R zC!+}W=nsy=;m&${w2Bz}x)q)H3hFot6JT6M`u)U#>$0Q$E2O$d`j%tMpZs3S2+%fc zvb+~i$%eS_aa49NHPDwEDwuGUKWGUYmw3-ni=Cx2f}`Nv`2$qlkisYJNHZJalFHHD zb8$QmkKDq%f-ie~+^kymcnq#Jd#qGtVW+H(w0>Q~cl*^ev2;jm+KH4zM);nnbXN_G0|rfyR=?0`F;kf<9f2$lJO2*QMNp22yvkWI>fZk5T)2!kR}b$O>f4W zW(0G5&A@CuP;$p1hcD!7&5aW3k_t%M@ShPPZ5?3{Zrj@hNS6t1;%Qe*gNNM1-Oz{e0>U3 zUWCUF4N~n2YLUS(tl2t1plF~XAEm0ji28M1AfU&PV8^!=@GT=EQEz_=Ycj~8OEvoR zbm=6%sDR#8?hvWcS}o!Y$Y|9!AVJ!Y4 z1{zL}z2WdeaA(OkV_8Wf+d{f)3f`81it>F^)P9A|)sNS`40zm}UVnJR<3qZhk4<&W z{x;)-u56)1=-y8Do2jRZeKtJ=O%0eiS6x7`*897(9rb&E+=$*Et*SevDx+Ys6A~Ut zytDKy-rA)0MVrcW{nlC8aC`4Mo?xR;pY~}4qXltfk*{$_RMSY*=Wje5l4Oksc`2{L z#vAv8ab~!T9h5$@{Ui2Qc?kM2x2krEO^xe53z@s{mI0^@!tpf|p`j;~z9n~!;mv)x zkX;9?JspkC;zTmM?Vs^qX*kL>)XwMs0Sr=J1ys`Vl~C|4{a^cnIFI)(Bm0a-qPTjz z9OcWe$*8mU zBHq!)H-SSE72wOSN0_3fV9;ebIR_^|k34FY)(E&x`uu0wcvdE-0r@_5-k7Jr*s%=3l*`V3^*yV_97~(j?mUB->TEHGK-D^vc*Bv?DVFj~Miu;J`OQh+SBVL1*IHogg6GVnkWmM4r)@Y>1h+ za(AF>zKN=k5x&oSo%G2H*Iz*naD+}z>e&TuQ5_x^d{PWZfGK-et*1MfK^RfxgQZf1&&{{Va^ydeW0 zTP#nP5`PSDm^}CL2C(`*Q}TFS6u68W3#~pP7TJ#CM~|&t+tmYvKqBv05!lhD;M)nt z9W#^bzCpqz?|FHobYZRNLLO1Zo%|FT)-_(&eKP(#MFK7$x`X>y7}(g4E2C+?(dy%P z2nB|B#=Gwu;2(TXKPKubEA5ErW%jrNAb!Nw2fSYKOyD4RR|AB!8yrYl7ny2vWUAj1 z*|5bk8EANU*QR`KTVfqZfD5dtd3hvX(Jmi@KZFC9z`)1O!vbYfy>fWi?Aq~&=1Ty{ z=>?}jawm4b0hwtLMwRmpE?HEwSUQDx)9b5PYk?1N8zXb_fBUrzP_1^A z-C&C&vT$(PTpK~96;#9og{wXIs@s_E+xXw`mQP9t<125+;J%^zO6&c^kS{>0o^dZ) zOJmQQe%eD1E15|J@4>nD;?3@Zi!Wofc*sgGOQXbB``3Jchc`|a#9W0 z1p&KwM>BUslzxX14_xE1%k@^5W;39q$zRkcG*|y^n)i*Qd4Zh-FzgHWe3hL|nxln& zvf4T|+;gWO`h+@1H_wb-7L!1xU_l@8ViUF=1hb`#Qrz6I=6Q*%eganv00}_6EW5)4 z^68McoH-KZYY*~7qPm}jqL)4=qn+oe_;A>7w9Mg!A%rHlJeo z3_|lz#)L$kp2?^BH5t!SyQVXqPx)?&uk7)rY!Q=Vb8Jqn>@_%=7l8`Og!UkzDU}S6 zOolfe77QYwHN@>i{B(Upq1eJ_Xz~gmmOoO5oM64dV2SrY@IHb&JP+-$w9X(c?)h5ZL)#cfWwyokKO&DU!H|JIn&7U2TrWu?qJ# zsiij#@50);TJQ_Qj7G2$cl9}3iG$XHM%WzZ>T`M+W}XI8Z%pI?l7k!Vvlplgi=laR^D>sOAXYLV!wcJPjL!@Burs ziGits(~XYu?P`2&xb{qQ754E@@R-s=Z;Lc!V_H$${T1}OZh9d`U`g8^kc=nTJT{Aa z>@)+)JMN@ToNMVC{iB|!x8{*7tW&EQi$zhd;@9>x_?Fp!^*wN!k_kMRZO0y=@12Q} z#~ucB!o1pJjo3aq5Tt8GE|H})I+TtsL=eH_7bt=VtTay{_Rd)2CH@E^=W?4Oh4kP! zgP!1?4}IBwxwph-lyL11vIXI)$^ObvHH_BOZ!~IwnKxt4nr_FVJNm-Uu+5XM$Mn2U z8!=dVJ|4w_-TvbSzJxxmUzbn74f%gT#&1GhB)Mzs7OF1u97DdU~E>l$0A@$QKc(;taDutS$ZVz_z&Ke&N-PK#bW;K z^@xI0_q@!9Wzzs^);$oF+L!=MyCD_hT3aRjXw(URFUQ6L2xrY5v)J(yzd?S}U0|Gh z52EcD6`q+U`!hC%YWp+(<8n%nJ8oyU$^H!3yVHhMZP}kOWH(#jv@nj2AzM#uNcLv{ zS@u5(8{i{@y`b35LD}T+au0vp4Hoo_Kz;We-fC6>wzgUM7A~dR7Rh z_9pi>q@D&wr870h+3vF=iVGbh8<#+fDnf~YGrLs>$-Dy%xmj$0y!Qp^OnpAm5ZW`y z20@GZkTnMJf)v*-UM33Hfz3YGVzbW^Si@>~!UTQtmCuEpsk!k+Z;yiuvyUmr0gOer z7j2Etk(51ngCKR|m|5O97Xz>E9l-ZnlLHIGk6z_8h9C9FlR-pkb`wt;#q2MXc+~f< z{>a+Pb18v9O+3#6(5=p#ns^2U@95PscT?N=ba37MzREqhSdWjkosf>=>M$1Us6Std$?gbG;^;UVim#V~A>f?B6!NgK_t>D4S zT&rn!t)?AeomdSI-k^0!oyuD>99yphi>Ml{C812zRQruF*XA zIcZ*=Z-!XvbPYu#?X7d;$KWm?9)+jGRAmky+j7Pzh zRqdkrH17y)21g;tqL4sPbfg?kE|<4BL$_!8;R}a7QL#^{Td7ZFvM)+a3zw4zn+X9U z&=T%dU-v5oiv;#ZCpY-RY}Z>*QB(7t12VoI9s!NKY)jo^d-x$}NlKjYh0>imv&())xjkfg@M?Tlb-UH{%4kZe*xi=@xP zFb4_BLN|H%G1^8Rf=j8#{ah+$TG{LNYKcFS_7YxA1qegWjTN-kJXatm%TYLTd0gU3 zS}@;7ydB3Ai+7M!R$0)q!@&D~L19)JHrxWUx7#cwb~pt?f0;89P{TOFgc4*0tx$1~ z!HkKtH(W@dtc4*VCQVg@13y8SjE%LrCs~F2)Kj1t$cQyFP7}fyLvh~!LX1V7sW?1z zbYbVL!H_r_6D0P|_{vEV@DzXgusSiWU(LHBC&8Q>q)!d7*e?h}MgG6keL%L|uvwk7yam9IwZ8X=9 z9vdaTnU4+FAc)2JtAuV8A7OUA^n8Ngr6c$y3C1>Yykutfo?06o`&Lm|NPc$2_0kcY z8>JBF*7ef(K>0!IrKJKad0(Zzu#%c{l_}Ia1-UQgcOef6b8rQrxgUzrP4+H?kq-B{ zpg^D#x)e!dNPsbmZjTx}|vqa$r`-6wrX4|M|Cv8G4hYv{Hx zpk<3^Bh`v~_#MfJLmiC}Bm~MqJ9!V;z=HJ%LSCb2+;lJ^Lp?z|S3744mlqoo!ex8y zl4Cv12GD5j@+y0YgYX@FzCSug@NmvZt9c4#ipNow78B*~{^%-pZ$T!3djty&TD(FO z3tWj8EQ(V(la|L zh-M<0YM}YleojXS#w4dnb`-qQDsCL5iji&|;!yiCy@&gH=30A?d>J$nWh#DgP5Pli zQ5dfitZOF*32n#M)_RQO;iBUNxW|m6g(jl~fxjDFUHgvd6x^ZxwCfh3rJ=N*E=I~n ztA(G7_Se!18jxkSSbmGQmapT^)Itn+qBi_slRpO?)DmSaJiMCM;uabmjp4C@-QLq+ z*%Ee?)Um}^$DCRn#6TTU7D&m?deFVf(-OL#UUPmUaMDqJNT~K*7uFK7wM_HXa_}Oz zCB(2kH5H%FJI)|GSr0z~?Vrfm=ICd&(LCE6NpI|%LVk%u}s--|3XNb$k`=t`VdU>@T2qVIcf zv&Emog_);&Fyldsvc*rZ{k0N2S=`X#*yDZ0AOzlh@naOx#2^Oh5pNi9Jzkwa9>$Sz zMDjA){~5_A+@e&r_`p8a%;=K$^7whY^Q@qGrj$tL;s0O?2;J#joBPOl0e0YBHGm=} zE4Ydkn0U@q@O3Oe$YZi6A(GTPJ}+!l_uL3i!=hgs3PvRhL47A0yJJLG;{_CLY(FT= zwM3G;cn77D{Aq#C>e%+%sclqW8O&!>%5>Wjc3DAk?{32ItLpIdqsv8 zI8kFlQo~G=baf2exrgUVkkWtEDD@jk2?#zF`?is{CG`cY))iQp_ut=c7L;*#s5*L(+3ocO*(9k+|T(GH1wc-LI6qHSvL0m$> zVJg#cB-W;)Ul(evUs{*Ox~0^l0jY^gYgDSKMU0l(83#4BR!2qh|9sB5_g!Wti2wHY z{GQ+Q)JHP!dzW+1cF#Tc+~vJ4E$nJcPHtf67}-9_ymt6bB!f+c@N=f*$z=%~ZGgcJ zd}Hci*G9&2$3~B1YEnKM43l&S-vqA(rEHbNu25t!h{^zsg-@T7dbNT;d58B}@`-Sr z*@iq0isB@(2Hw_*tDp{l?hlGvVe`MyQn=mQ;J}ZC%I(aE7ao!gX&YwZ0lbN@$ThLa zfZQ2j58z6Nolv9m6a(;8*?|X&st!>N+fQ1fUZ#d#Fvz22ZC+HVJw#Oyts1H7goKeE z9x^~Y3(CJ5%I~|@J$(#Sb+u7`C_Zkht?HAY;)K?EW&}FUa~lE0bqdx|ahH2*sDqM* zWxx&y_+g3ACRD3~57CyKd>h>R=M=C-6Nn>a1)81!7C)hAB?U<)q`d~d4$%?;U9$Ue2<2ZFcN}TXcOgL5nOQx*`x0hc-2VcSQYc6-9%Ixu&XA^>(`}3wn;RCQ`?2Hwq6N(JosqaLYQinNL79@KxgsAx=G-(WW~52Q&si2=K{FUz_PHsW8o8?OKi`BIexAN3C=WhI%fOjPbB5 zynNd-bzD|c#S@R$;U`gl6aS{@ndFaU#=A(ywY>DGaUT*J@h+0}tc17*-dUoV7MCo$ z9;C#Y2sgkRizRa%XOrN?0Kdon`jIkt?ADJ+BRBY zig5d%Nh1#1hoh$A8BW#{z2rH464jS0(xxCfOMf)cyqocUK9(CloMsOECqdSeP2p5Z zJT1!$!SuV>s!Kif4R`5-^M<=}XlNSNvJ-n$g&u!k@bLbaZ1a3hT1=-*VujO-5Lv>w z*eO{m)g7gbVQ;6MPCJToFScl5O|A)%QQuHkjdmN+ZbQCUF?<^<4Sy`uC{~)PgC||k z4X*etm?~?#!Bv08V=On47m8jNT#>??J&uU-I8fBiI2s_PDo?=8&18M{XG9!HczzK> zrvZ(A7wwNtV1N+Fj)F}hWhf-Xz5u&t&b1<{N>iuG@WW@=8w5KDiwf3k1%5i{Mqtzr zXEGvF*@*&}dlmHHDjE@aoh9N`#7;mf*fVn-O)d1=+453Fc23ab< zgGj&&L@#>;5@aaX_B#w6&Bz7N4)}b@$(s=O;{_Nm@a!^g>foT(F|iSyFwndo{;)QRL*@c>j z!FfBMh{a)WUh5K|G7Vt8YG4^&G1EkDUSMa8r@b^eQ#&UZHZ(NE8-!}J$`?&iD@5Qs-KWM{a z+!0D%EWr9Wbp*SJtJo_$Wy`SHZAR0`jYqy!jat;mV6OnAVS(XAfE~;%UL)^jvCFZY zQf5(2+$?UdXV!b@h#Aji!lU6rH2mR8z2gjJ^Fi zMt{B-x0iUSyE?+O75zDH69K>-BN8>(RkWQQC9=19s67}9R0l`)!rvn!{j)=LE6QMv z2=6Y23xQ#B%=N+m2E{L_y$XLv)Qrvi6}cFT_I+`hpZ$y1+FeA>%ZiudrWN`X4D zG>*HC4c@pWzs7N3xIM9Z7@04Z=K^WoZdV(@LkS*gR%T}_s^3?{rz*zZ6O6OxNJKk( zW+Rm@d#bLiO^}7K>F~_dp zjc^;p9w-I|i0R{ICJBO?(>pyC;lK?;1GeHv4ielc0aFIC?VbQ!hl4kJ1DOh;H9f=Z zvvQUx?r!vn1QMJI${OjRCMG{v$Wl6BIQ+Vp)=QuJFSf4cF}Pia99(w0bc#mD8Lmg@ zjxn8wmCgp>4b|m8SzS~Bz?J-F1Qc26_!p_$At6x&88 zWOouHkSX4=Wm3i!O2wx1l4173*2kAyUTw` zv>~k?>hF#E$o5T_ezR8*b??a6262hlX+(OTz^8#)@^CY@0d&d$&MqZ}2*aP2+QO*= z@8t8xt;0nd1X^0(8S`aD9EVo6QK7TE-Vn>~RRghQq`$7mYp>{X7Z8{~2*!guM7jdv zEWjL8{_+c2rPlPOpKyD@wty^`v#i;qWW5Bo<1CjS1`A47v0}}yjI+>X_=;4K$AZW5 zdsG#zQ;}PDX!fmvGDAS+L(&3x+M51ftR=|NBOM*)>2TqgGBFz3XC-xG*>TfvjywU4X4nYXfq@gHUuH6q8@EK^L2ZU?tXV@JW|-PN+~buxo$KDG5jZ2(U!ueCNV%QuTL=x0vEP zZgGo4Y?kF0+v2h^kgB}P6o1iETqkj2`i_#~Iw4%AGdM}#%Ybo4(k{qcXo36>(2nGW z&R+3kmgHxiflNeroXcK1;Zk!i?$FaXj|EG3b{1PQTGKy9UlaylFO#@Jj?eQ5B*mgm z!tIa-qPzBH2brcg`{>?53m&J{c8;}hk$mfn+9%c;@wByuo&q02u($k(*A!QW#ZY9sUC2mwq_h zENKzLqZwjBd0!8EYan10^suTg9iQ9H=+ka)2@UV}A`mzb6 zJW?S)wI{}MM@06=5>@m_8FXcjB+P^W>_=T5i8&*j9*&8^k`?Fy&YHzJ|59~1;ASc; zEQ$=;45~PTcAF}9JF&VS7#55vZ|v^1^)U72ARksmgAtG2CxoO~efz&?<+d}cc~2w0 z6BNAUU-uye;E!)}Uc__9-q9i_i;y5nW=Qbfu$CaLh-a}7&)CqGorre2*zCdgBLO$` z$~R?^BD~obR#d(lVZY(`hhMrNj#dx=fEiQSguZ0>BleBc%jj7a_%jex0q`ck@&RAq z0e-Ir&IQ-RKOhX;Kf5gtyXyr2nP|Q+c(f#7x(qk#rFB?caRqc3g3$#+34bk5C{w{l z-;k?JwB`jvFE=1yYY3p3j_CD_?$ch@NYj_X$Lj5#=DS%OUW;S;?p8|IItd@y{)x-e zQxeWv>j`I_#!w0Ujg-VfFw%;2UU^c%()-r!RgG|^dAq6}RA>zMbS$9}N|C@$WFY06 zft)zN%McpfFgViaRVx_W)(|Iuf#k()Vp`is8o9FMdCQeX$DH1xn(NL=yPtK;lRL+I zR}v#wr0~u2Hh^x-^Rk0lL+xx43l97N8+5+swEQ59pdM#$)c$)Pnk}$H-|G+jVjIK$ zkzPBZu1N`Wf7I}um(&t~`_fs(JnRA2hOf|jd`~g*mh*g4bl>7jTW=!Dncr(g+Y-_H zyzI3K2X@}G295YPxP+w3J%vxWCoyCgMIq}C!7>SuP(`(xqFVA00-ZJs>)XnoB&MGQ z(jQyul|F=DoiBXF4&6X(3f6NAq6w8)B1ZSaI#Ki+XcZEIZgOG0)4#CJrErD^iWXS* zhbmq?nJve6uto5cI0`p<2LgUIqkx3P{qjht0tsz}3`VmiMnx3Bz+>+bF110Tcx&G# zO3H8xQ)0Ps(LGy3o2VY#3=nG1bmCFEq|_Is7y=m-u995`+^IUgrM%zKP|0dq^i>@Zy)$N^L6Nq6=X0nJV&2$-SmM~@KA zc7(_M=|Q9u3l|P%p8DBgGihB8g)HEBpWX5}uKh_mhh0?z3y(yw6Y<8u!5gRG!50D_ z@IJWOrx$lI4&8zE2onPLp8nY5Q=I-F_cKSKwq1!6t`F$4S%Z-U0%VY!ewPp<&u3(5 z9ArR+P38Q^8MgO8Ttwl%3gEVoz~$#3HH!D1vmos~dxEyPv@plkTuOzfafFn-C+ zT*O*(%LFko%v?n=_ky?Rw){4|v91nfh$*3!g<~zO1DWt2$8S@oUF%?tz7%;YQKr*V z2WCP9ltvw-n>q-=vv6AL0Dkotr;cJA%Z-*j|7)EY$qU1UqbMxs*v!5cd;i8ppt=N<1_z#)`61VI3+ zNoyd8)hLN~VR@rqZ3A+$a8;D$s4Fbj^1H@zqDq$AI=jMhssc&3bw=YoN6H|kqU35> z5tG)jVyY4`H9BX!M;st5*Fq`7b`_IJ3%3xM*P-qhff2{6*zUq2_zAvFYB0lcCal)K zB`GTj)84QL4;7`XoOHf2( zmDpSyPS%ao=A@9b^YZgSG~;Tz^$sqy(SZ#75gTVkP22&HYB9=!Qsj07x(fXUPE5OAwdmL7dg5n}_riPk|TD}YzwYFEGIg=g zeNdSDpfJ4ff*_$VKile2nC``Z&5K(7lg;No-{BjyWZx6INEDrvN7*K|BLMya7WRO0 zCn_ULl;ShY+94Hm9)@D66#HtS4o{&!6%;aO`3?aSP>>LL8Eq7_h0=xzzeNyV##f)o zfeCaMo%PUjr)=hwy{0e^*rmNGvHq2Jab=Cz37!E>Qvtbj6Wf3m&ucHmwgMz~DhV%R zo?T!lbotC)eW(@yR%l$PL$7wuB&ZKGCfrFXj`~+?+_>?Ri#4vt!R>*^gOoXp42e2k z*1dz?6}_=8<2~(^MY3k)6Iuw3LTFutph6qa$Vp1(#~@0Jd&Rex7KeZ+BnOYzcMuO? z$*OW_6MSA!<`F3yu;SeIvFIa3Q6_EjBXlAezS{esHJe8-d^;U{^i^>d3C(Ol{Wdr} z!$1nrZ6jzrQ$1TuI^fZANII~=IYT-|%E!Ndx`R_h*w+B>G}^@b?wHw{ekixYQEG_1 zD+;2Z;^UxW^(`2IEB4?92~g|Qy#q~K<~Jn%&E-YJBhL`!m}bV6=?K|tk$=|^RdYIlm3=G_17IV}3_@!SdTPBSy#8(T70C{S zXk~?voiCOy7jxGqA`)@ld&^~I%vW>RC&E2(9hg{m32Zf4+Ys!4$;EC=W`)5GrwHB` z@V#-OYyhN2AB7PVN*^yr>;95bv(XIUQ?Epy;|TyM0|Z2#FqvrSSd(Uu4zAc_%jp?Z zzz_p+t{|3q!sdFQNDQovx|6+-Mw&Mj^a;0aK#gurd`SW(eAFRhzFS++Tf4)fFvr5x zDhr39NF&^s;AWs`{oXO?T1fANd2Nq{+VD}twsE1yYR>Pu1!a41#S*~ou@up}doMJWBLu8P{_{hOOnfETb6CQZR_6aR>Wu!5degxG%{02KL@t-rqgI(pZQc}aL8~l$krc+86mGGFxiaZOZZw6zCx!7Qg&S?*zmT;K8Vq6) z@+DFjZ&J9y7S^qV7U#8Y;q=^p>~OBxuCwT^2Pr5dFxDCv*|~0OYgmxu~lIjY}>1)4PMOs=wEq}^7(8FiPF|;TLD-7X1|kcqHctfDdAqSUWA-{ zT+|{Nr%stK$XxYLF?Ho(TPEcxW4hkwGmFH)1Hjq!vChTevbB&J6!rp++>f7!zh2dp zJqvN>p?||2i#N)nO&N()xK*eh@9<>|LrR0DXa=XaG+=S=#{h2xP6|tiiF!WbgAMWP z`73|%rLgd74A5c=(Y2Ebi-E6ri&IMO`5kffuYJnf@S3Z<_u*NU*Mi;K*c?Ah`oIDg zeX)%y4FiCr!r)fs*~0+cpg712OQ@2-T!RY>Hj#Fbdidw<*`FFr^My^C$o^FA&5;fe=LXlH(5{ZUjOdi^nY-{;rh40y?W^( zspGK_Qm=?hFJyjVL;BZQ4{|Qfr;PyV%AaMxokBtAnfzI%{8`o`e>`Nk2nr3U@fhtC z2QTA*$7ghvep{SMQs%uuW}^BXaP^5FA-lL=FKFEJ&*w|spDL-Uh`FLq_Aj? zJZTaWnI7tRN*GQ;EFvpk0#T}kO~S^05XN=h2kVmWrfKOJ@e*YjGqQQgTRErDU!u<-e&USm3q-g+(lGKy3F+KCZZXEyYS~WUy@UShxKS z^ayvSx<%%Q9VlrpqFa8}m6Luu1QtLA{=RYBLfr)d6Y-J4?zprdU7RZslBzvEirKQ{ z!l4Sle~ORR3an?7#%PlCfJD4XbEF^~*0{;lWcpuH0_q4KC{UMq7yEmWmM2cw2*s?P zm^s}`icOSLX|$1_!XtC)y5{;efVAw|c?bV0LO=xW|CA5{%0Ows6#`Q|LSU}tc&S!k z37b@=Nk$06G$+o2m#sNJDK{2am+xbGUyVoKTy)XiFg|H_;{^y0z z{(nvg9YSMVT5yHHRF4ptYdPMj6HlZ@Nnhqc?WYac$Nm0BL#p zpOe%DK*U1*4@+vQ&={8%jHF^J7Uq~P6CtH|wIZ3Nl~}?iEzl$*r6rmZH>oV|24H$` zaRM;)EGRLUIG-HJ>^-ap$tb$@L?&M{a+U>#?9k%Vo{f8ZBvahKtP-ek{usi~1>t

RwCQ^NF*5<taO&~#6Z_bz*%ox zuncUp`1Tw<9H!FJpL*7@L8`a_kQf7V8LIjVKD22;YN)DL_{i3K=4u86yjL~9R?Q<;QK)JS|P=3D?k-#=xu6Sq@Qf|$@Z0%Rm&@W z*%$SPqedgOD6l?VjC~fMJ7skun$z|yX5B3OU1iGumEcQCn9H5MFQ$({m$Z>TFy-a3 z?f(u_&XQ|S^Jl03&oSk*E&oZToXE>hHFl%p6Lx!uX%?ej5*=b+Wz;FAt!mt`pX5vR z)yCVO=IL=00x337V)RLCWSKuMTIP)-B+-)BFGq_(4*{2mcPUgecIEUDbyYUb z7N~7KfjAL+Q&I-0+`nW87rqK#64@hj5ip9yxh_?bxeDV*tceu^OR$g7z{Hggvelxn zHP@Ri^V4+`K;WuF0wMu?_^Jf>QD27$2Ha1WJzkfrmE3iwwnG6EU)Of80$sPQcosXbx9)lDHm*YAByD(n}k>$EhMP7gES=t$JrK%vv zTqtQw+9@dn=c24kfRBakI5%7lo);F@wu@?CH7OKYy*kN-Bb$nK6nT_8fJ@Aa+^y>> zTdKMP8OrhMk(tdH3GKT(lx6OQw{5!)*3edhgRv(54Mav@^6D~F_OPfoS-j6UBF7dV zT{5z*i@ewVP2{bd@yrB_+vrt|2_GXuuc$mEJu243AM6?U7v?+$z2J%gK8o^tS0>Bb z?!YFJ5Nj#7Gn&;ZX(nq@S&B(;c=;h}xq8&CRc33gl_F(wc_+Rx{4Dq8Egp*8ICJnO z6@$07WCt^GjY(uC5?5fQ=P00V8Qp`MA*dptgGxYwKNgnp!I@-ya2LnXQ13>q!k@e< zOtLeA2QZhn^%C)ATF3CG3{Y13Qp%CiPUcwy<`J4ymZ7V61Rsd8G8B-ym+1S?qo!#j z*2E0?s*#F0RauRV@0bnXZy=C9<_s)k{TfebiZ~d+XIflS(jf#p1uoxjF!(|p1o-|I z&s60wFYryLV_)k9$RsTWGOvvlx>MEVCdceiX?RZ17P@0i{0ZO=C&PhM?8{ll=ly`^NQ*TwClJMFG%Uqs7+6K#>vMg?MPdmzJD(x3Cc+8uL`<=r zFw8^_0ZPY0*y3!UW|DNj%`g(F=%h=oY(F+B=$5o6;&ZgN6sQ_AR^Ed*^Ol2Tz2>Eu zXR%YKEVL(5wpk)?>89F9G*UCAd_-L)G zKl;^;q>+~Z5=Vf!DlfL7MrG+~z*JlIt?@^2`*NJEdDr(N93y?y$rxF7G^F+rWl~~< z7hE+M-a{sbg+JHKYPXOY=ODD0d0leN9t+vQRBoqpgY=9zKK<9O@(3t>`~gA>Fa=J; zSEwX9kA{@P80UNH)Yb(uSY;or1MW!&W_aw}?;xBYD>WjcS^*MNLgkECj z?n!waC$tA|3ezn%V?rWcrex}mfRimNk`A*it9Z6cITi`kMJ~IxCt%4aSF=6dSQ$3? z+OE8}bkGP{;((?C+i8#l+m%d&gCYK-vGb<_dxoBKc6Z0Sq(Ld= ziP{k*wfQ+dCFA;2&(hBHK&pyWU@ojewp{TjM7)x3h0jE6^t# zd$&vo!ro)e#0({rTey2T)py5F(SPM~BkWAh@NR+SHJkp?(cOJLtiJ#%^8hMo&%6mr zP^1e*BKw<%+9h~+pD8o&@Btr&X0cII>X(Q6u0b7RBqRv~j@g*WLjg$YyAma2Beon9 zkPTyL>3#U%g56MO%VjT>Iz-BRY?71Oi*2H-Uwh?rts|$Sec9 z`1ReTPqdX0d)~3IboJ%`$w1oc5R7{;)%9?1n`L8?a@H z0Kv)C8A@r%b37I9zl6n}>{BYr!%3YN>ghsOLlREpBInIYI1tVdd%LRYA zMD(Lr%}0SHmk8rov<%z&!91L9OPo<=dK%#y`UDz3uIZ(3;nP}zodh{At3`l`K{Zfj zztM;@CYp^a_w$PQzj+B4U2ct%<9E0+Nrt6MX)bWKzkMP(rNG25*+@5!>DMj1J&DvSG=!;-xz_y3m#qa z{H6HJZ6`kMJVJRjCN&N)?Y%reA#&%DEA^V}VYoCbqaRPpD`P04>;S+|J`9Rq?O($r z5mUMcXco+Tv1B}k2mRcEa`+29r_^ac1>-+c-6EKg_*W{vkMNpFxL|>71wbolZN}uN zKNq|iUs|%SiwLbqaL7Xfq$=MAvgL;uZe`CS!z)^hcXK z+Ki*N7-v043xH=%ZAo`zUtZ|D+WCZGs_!pxo*oBaddYzB;9B2+;2LrtjSFq#+8z&y z@5Q#EZeaL;{M*0XGY+`DrONbN44B?SH@=R%r^1J<%>6CB@f}zHwL{x}WBR%rZ1yc- zQxUzN*}J{Td(6V#W|J?sB$n0mP-UOUZa6L3+rKXEqrplfF}c&nmkU1;q`KrZX2=Xf zAx)&DYHt@wbwv)s%R+t0;rmzq)5=F|*wNk7X=&cpmza!e%sAQ`)4P@DmC>Q>O~GOd zU(`gl+TXT%C|L=t7e~7PnV$6(U+_LrR+(4M%<2 zObG0uCry!9O|;C!5!xBvZ{P#{?ngp}1&xE#5gekHqwlaIq6e3QQ0(#8M=t=7 z@6d-^VU=+s5dUN^L;JK- z+Ez)yp?4oGMOk!^LZi*(DSw6*4v{hBckf(hq z&mxqnFF-hkn+L+Hvtz&wwZzJe?>-?bzSW2TFByrMYI;~ryENpRjx4!4tN zV*}ZW@BrN1Ww3kagY6aB6RdFTD_r-H*+B+!Aymh?tnzz@bR3Pp$??VKW~Qn2odD?@ zuh;Xe%6afzzO9Q?C7OnzX&il(ZQcoU z@EE@SPzih|JWuFXpJ8a7^8`0Dg@^0ae$OLN-IYJ!m0Yv zL_e7l^i5;xpsmE1j!NV#u+Selje)`A_z@!kHqtk}=JCA2qY6TVaf-GlcsqUxx2LEt?+4*=nXHzfO$<`;Yhq;_c z_Y(81^Gws;5)8V-_Q^SG-*g?v#$~#0g^X5U(2U3Ixjqb48Tp<30*w7VwgFT^pXNVK zM$7mJh1bxYP;ae*Am&w3GvIjo5+~qtr${@%Hy~)g(-aKPxTV_+3n*{!PfN4Lxj(&C1@Reg%KiD)jq!MeUVzu9WnI8tD{S0 z0-BQXSYVeKxNRW~<<;AYtj|80+kVX?SiFb6k$!Z02Ai>jz7%8xc}YM8ymu3ZqdoEp zWKHf$o>NLI6Wf42D1B%|(sgk4(gA*EaVwk6PB6s@Er)0P^Y%SM3;|j-6Q-g%`!+&i zKB}rr&+v7F%Xp$u)t~nP#d4*QdH54t#Y=B6JB(oeP`}9N%qqMB1E{;uMr_b7k|YEQ z4wIEM2t+Cy@e~CEyhXdTXqPQ27h4e$!lXc?(^C_2rKG3~g~6IE8x(W^32g@I?7OeW z`8ZGx4y5yEk5h4Zso^ggBPV_4293Ms=F89GtX1(QUF)eL$2zhwx7 zY3?sp%s=T8LqVOvzv6?S7pUlA@1>j+K*vCvhQpkI5Q1A=wWMyiOPPpman({1g?Xr} zGlvWJ6rm|7#SvNgLbD|2PthmxR4DqU4;iJJ?SoP?c{d})%l~(Yox6vRSnYfT#1`!c z=f5MAQcR#s*$z>_D;WSoNUs#10rX}H`JA_zDREyl7PB)=D9Th8puEvOEL#^gNIk7N zTDtUdB&MfvW9N$csqN0`+xJs6X6Cp z*#NJ6E$>9mV+gFnnn3hx2y%XK3wnGav`zbF!zxs?QOUanS;DBs?O*yWCePjjV{$R`t>z>$$~77#$uL6>tU!%!yMbbBO`r5izQ?_5 zF&g2z>1tn2=j)}0PPF)0Cq=`!O{el$%=pK|!x^O^FxP?Za_ycRwYC&_;zt0~#b}*J zCd;?2p%fBwg;?V8h;*C!S@_9U<<#V5h-)x3(~KIzmG>}D!7z#yL!rFD0`tDO zS&E4+rmL{UCi5UGx`0sT11*!j385IESBIo6CaKTQ<%-lXv4;p2JG1x`h>k?}S!r4{ z2%%Dgw=LeYm;ENdt;AM%>3$0&8}D*w@Z+So^fNBg3+U7Qk5rp8~c+^N73;n=X}b1E`oU;ahVU~V&yD>i57-! z^m%RIXENv_7W9#%iME^zGQH+|`L?=zVHc5dGUXAYj&OYjOOX0(zwB;GsT#EJ4Q__k z##@%+qf~3*^)JJ9ierpyV4o8og51lruqwklm}_zafvA)1Yolrv+)bRifiCZ&%dC5S zj9kaRHT`vY#TSs+8IRlDjzSmx)W-|oHigTTsWfRKbS=3JhLA$yMG z0a3{txe3MoE1=FqFqkJH?9 z;&iLu{zXh2ePq~g46v!nH9r(-sV2`xlin_t*Fimynqbh!hPom{&~1IabT}|74#I~C zyuR*Ot~)x+RL0TW!-0uv(-BY=KMb#BDqzB~>Y*$Dqk9c)c@RHoO0&;z(r<`7f zVG^7jEHrz_+wvwEReKa%9^5H@phSG!&n&LSCCPSKi{4wJ7v+Tm(0K7N<0MG1pwR-q zvXBXf<$x}6~O6IpZwYMo2=}saB44py;#o|Re|3Fr-Y63AD#j4 zH{g7LtsaYCug1bVHJj_Q{bQl+*f6Ynuuzi++M-!(ck{*AMZv|j!q{ssvk$H~UxsbY z&G6kZP>2l_s>&^Z0EkE0c+|L;cFMsJ@%f2gZb}z6%J)q5JPJvB^n* zZK`wABisC(^ud17VyNeqs=WON9*c3}r+M%vY-WN1V=Y+R7(1uELEt~OPkz##@OTw9 zNX*V^4duwy>^{uz@aDe_>&3g(!T52ZP1nB(3gCW(OEnB{o%^|}5y&ZPq*8G2ra1rF zMLuI-I2P(C)7m19n+i~Q?X{g*Ah8yn4tY8dBe>?H$S$z$wmVELO>U#6H5Um^Wikf> zoe(2AhpUZ|MaLKjbMhgs&iU+|Uis9@t!EGz2ok|eP)pAJTdouj1l9x^d?GOZC|+dW z2`dGyfafLnuSF@{e3~ zuS(61>@hw(%M70I-b>)~lXAs5xB@GRJq&0Zu%!F2|HU?7%G56N1@DF5r%IVrc$k*O zj6znTg{Qp@S(p`Sc7iI9M(m7VyvI|by0nML5OOu_j%nU)!cO8W^A&u*Q^NQt(&Y$e z?iTV1utQsohMNyzo~Ic(18`JmD0c=G#=6(}--n9W|PSyZFc zwPlz(3Ug(8kseTQtfIJ4;Gm2+>=aZ_yMM^%EKtg@mC;Uo1w4Jlk9Y7&<<|5|XqBQ& zPTGvh`lWA`P8ltj8XF+Ou^UQh1}U8^Z`J9Vy1|?~;0xFUqAGVOzGK?RWql78%eMu} zKz?lZLjt&1+I^NCm`!bOQmr0u!B2rU#x)b+yq91!TX33Y6N^G1$Zfm zlwBt~3UJ=l%qhpn7~A)!5CHaQq)|3ICyev6crZ2K*dOkt=$mgymXt_U4mNN`lk*Ay z^$3T(^1x(0@o^!&vlKXizt_QtWIlz^ZDFL%1qht*MR^=_#ovRY)k=tTO;5p7^9puH z`fH5=(LdVH{u$%K(M)GtTYphulBGgxB`;~;8QQiGJJ%-<5&-|3a$%(ko0Ud z>&8On!p0tHmiNevZfHh1#KaT)=;EZ7f({iz7MhcN9rO_C3}zaE02U(E z_@DTT(V_2$+rf8ylIuEQzgnL6fsj0TxC&6}xuqtY10d;-J{L0w<5-gmM2H&a@i!Rw zzj=XV=FQNmU@wb(ZFe2669_l~n+jYgnh0%<)odOR{SLY5gny3GA=gc~36_gDPxGLy zujG*!;g~>XeG2bSJgUt5(n-xH^Bk!A5h~myG+43}Tf#RVvJ?>x)J+X-xz>Z%{^$sB zFldqWo4qjo;?gYxw`lND31f389a$nDYlYCnuk1`yzGg&*PmFV0;S&7c9(*zoe6nRk zpq%&1NB_X;$X?MB9fQX%*uXEl(oE^w$I_SO5H2Kdf^@CNO-*ycT+y40XqvdRa!rpT zgP(&ZW|HUd>5S)vr)ekQmUeL*#`2p(OONw?19yu~f8DYVp~nNew9~>kGnJr(Zp31; zPt(d}VD%Q?g!%@db=)=LAn_WaaYP_ej=y~)lpMUPp~J56NNzeN8sZvC)?j9FTwv2B zAQUdbFs)YE7kNn5UhuXh!iEyV&*gF8RfItDopmSpKMP$U@%ZKVTVN^VGIj@t+#fh; z*$tbw^?MUe#u8*?J_M#XKn*Z~2&20MtHQE0jpZ2V22knW8J($V? z;RUka6390F2WTHWfS2Kk7k&JuBvKD)M*DjCabdbp%e;o&*B@F{X>(3T(`)F_l%@ZM zR)eS|^%o!|UyD8P9X|cag0>Y;fkjAghGCXVBD4^iV1}c6>9Ml-&O~Ry?QY>)Ogo;* z!*sdErTaCqgqS;##ou6vcDa@NWdH_0-ZR0aJ+)Wo96C!(0>%78f@WmXM?j%{8UnQ| zYM)L-a}2#9(iWcH4qjo@kdgXfKsGkhX?e8nM^|Hj9ypmJyRkO#TRmA#1nzPi&ig!9tj=^NEIH z(eYZ-7jMATDGP)nDtRc2SnIi)r2`Xn*?TTsRR#S=^b8-sDd0U52yk}*^l5=32Zx7y zporABU2Qasy$|3T?dIl#hCA3JDH%(^Yrm(1P!eSvOydd8=$3_nm9mzOQ&HAexy)j3 zO~FJMnam2bVU`Abr4I&w;SZf4iMGZ{xY@o&y4r+Ul4kq$Lrj#YnL3htBlbLhn`D9Z2CkEj4{3O9mpwFc|5YI3Fl}}%dL~0BB{#ZCVdZ% zifA4+hIk=;qH`3a5Bw>YFH%Df`HVl6pUhW)Ij~kM4*XqC3LGHiD&H^#UNZ%>Z(Hr^ zP=UMa)5jQ69QudrFq2y+j89eGYT$j}4t%MhF(f(VCmBqYv8l>I2vCsXgz=<+`h_fS zd9**u_rPCPTLH9-i<#m}`|Z~!ZwV9J&Tt#dl$aSY41z{8yGJkXg6tg`ki8Q20V|l< z8Uk}hkVP;uNQE56g+5xk8-8K`q~!MO(Xb(m2eZ6Y&Vh_JOvX}_C+#!P6`Lz#IZR*e zvs?+Ms#ngOClXUT{lFF&u6@kd;lOJ~UCA$QEc`_G$|w3>46HD$t`p(V^*LN3(8Wpk z(o&&ryS2#+^KlpppO(bt%u<7cTsboG3lAi*cA0DY_0I~aklqsTKc6vg6?OBRj+>ag zEjf7`0JsC;!_qI2;Mgq~NsNpVq;(Rvw17B|gE<&BCY*T20JFPb%I12wf8-mYFI`lO zD=|`e_0St1^*+b8Rb#VOBdl`%Of6L}5j0%fM3apMQ$zne1)6Rx)^YIh5xVSPt`_nO za;ztVn&k|(r$WNGeALZumc4I4`rY4=5w%zlmPQ>J-LsM7p-r`=?*syg_zQ&N1n?AB zaWdzE1KHD(_0mu()#z#N1Gs5;{^60XF%wVANuQC$9J*lyTD7^$&XAqQiI6 zLYBtD!fZ|d7yza7Gx+TdO}t){=c0*Cwwtop*r7SeU{OumiZs6Y{i!R_Sp-}+{-f&s5t?e|1CAN( zzmDLx)2Z=5S? z$TBvYYt0zuc~kNE5l5St2N;34ba9s!ll}>2~=1ql^-M=B{HJx>FeX z;$d2UzygmT7M>S`cyePm)Qsi`y4}azw?2p8ilddv;q9@xvIPUDXcM8W*zjHb{28Nc& zueQ?}XG(X@Cw4ADZ z1XvJ(jaX1Fbh1V>uxd6BrW>!86-&<7wgxl=>h$W@;WJ8gb)yKe7Stlx-w}w6f+`>( zeGTK@*wmtX3ekA!Opk7V7bY+}LW?#@QJFlW*xbuK#g0ZX6!Hg0Zb4hc!!CAnR{FEW zX1#TqgNAtjfWLf(2mXujAs|bgEjax;{uK4szq5BdyqF#o!QsmTn4^4NsYLiosoI)+2VHlO^A~bWe--@kceclgG2v1-NUI_c8a_M++e-y)e!r45W4D)5?z!a<+?9n zrYc(jk2UXY0?F)3#W4fPv)Quk!}oGN2LxL~9~tB_v}I2YaEOWuOv4 zN)C9v9$_3^Vhb%Adg-~LGx8g9D0lF#hC3+GQ$y32fgY+6n>hg8iRn(l*D-=gBrEY+ zce@Y!LZI_tdAJ=`b|cE{u$lKB67ClUE}tL4up@2b`FynNgX&eT?r9!Qj}fH-FTfJ% z6x;?RT0R&s3XL0WRR@Z6_@i@km9^Ag4H814&t8Idtogi03vkNcL2NG~wxWU(20)AA z8n1&qlrOzdQlx~QhmB(ze{>=&&6t#%{cDAEy61x(Mr~4i2Nywa zY)lRLy(nF(@13u)V+41rh%E0iJo?F^Vmvw?JR*19HZLHLc-@hR^G6t~eAx}Z z=76?U(yTr`4E@bdyZv{?td*mt5On879))@z#=^%FZ^@4@^{B+gq9uKE3ss8U1XGC? zX~N6a%7}L1#07#oRH~cNtNdey+c>gUfgvE*3_8}up50I_Pw>HPk`2{ zHzK>#nDmb)kR+W4PNH`n`6ECn!e3s(1J{sMt3bBQ%`gpv<00E)E?PiV*xn*=QS!TJ z7ctFlxe%qr1JxTn@IHU(t}ADf-u5O%B9^F)CN^be-L2{0F*>JPeK0d`VL9E%(;O&Q zxeW)2+#+?1r`Gt_q#VIQM+l)cJ?Am}!WPuGV9!A&A*y1w1hu9woChE#bP;RnK)rx` z;Dk@IJJReP!afD;;~l`;%Cy?lLwG00!yZ(Q4{VkVzJ%3ZH~*)9(V^_(BS6$UXVl^S~Oh4ws18WC{Z zjza8E9#;-#zQMv05;Ti;A3aFVqj$90mzw<*D6{?oSIm7V3e1*>m&I`w&JKSnxV$AKFi1cx3tn2kTaNzr;z9=gr%O zSy>N8XFC|xWA>1p6T=+=WH&E^+6v(h;B7F$I1Vw>j*09>ULo6GhdJ~+KFz!T0Eh~? zKZc`rhZBC7`M*+K{H9fpaALM?ROkht-Z9#?;8ODy8{tR3|fWl`)7+I+frzWR;x1nVjCV~$sz$?IH_~O$4 zx*U~g0&gV)pWn-e7z@1s%|%odn%jxdDLxU(uczg_-So5%h^OC(J@NfKBjzfj_5Lpe zTZ<^;?dTUiMmsersLn38l1CXY@3E3I*~p3-V;NYuC$qaYa915a?a(#v@2u$=(sXP3 zd5~tNhxq`;_Y5FadFOemYZG)?1&= z_h{Mma$I=D`i*QtWi3GX8d0W?m?-1*A4_?ehuiMcP%p=X&_CqzB+E3L;Z# zNKvg)=tWY593+00tj~YufZp~j#E`1|Ct6_b(=?LG+T*FmNIF4kS1!V5h83NG&!Vs{ zsUn+;qTyuascv=yv#nas(Cm<#y_(rpc&8a`9R}a^QwO!hDA04togjP}ex({r%R4yPZA#u9Ia1k^S8Ho(f<<+ukpwlIkJGf?Ia zB0l{c;i1~yJz!T0qJxW2yLfaEmdN_>G-@Po0s|#F_YuLqeVMnTc>~eqAh)=U@Xw)F zqN@S$voH_;3?A^=Uw(MlLhZ}bifY2445!iIF*itJe5GZ=T2t>_nPhSj2Z!iz0r%Oa62 zhJmD(39A$0EKvT;EgIIMIFMA+9;hwF{Z8$|Ty8cV8|qkEipJZ}9wP^Gn||$acT{|xda^R^Rpbcc(6RZ&5N99rLs&}+ z$2Nwicuuc+=Lz2DovrS+y-8K~FSK$;kDVAf(=|HW#*NsA`#D-=w!rR}oo6RT#$U%- zws7A-IViw6tv$o87yk~8g7}g;N%BsxFhPS*o&Z^Nq|CGl2Lcl^kx4vbVyH!J|KT^r9T>EK2RnOT5(XvVD0M!-?0v_}9W`i<{8HA}03K}CL zv!F)D!c26_y#vo&3`o9(k(DKWyk&8Lky$!G3}xm{+Ig6p1pW4Q`7#tYA#O~DHtL#E zJ0lUWQ`d8z&3AZ$0Ipuqh<}g09k63j&I^LtOdXWTwQJPz_Nx+A|t^k zKpm}_Ofmj^9~|#c3;f%baiNXZw-Sjw)Aiv+U&VA`J|Ktqye1!)f>|Q~n~}Vo`qM$B zbNZkd2*v11Xh*A@?4!-jtihimXR9VdqI#YyDW|&lZ6SGxlqXZ0RG|fEYUr6~S{CgN zPf|N+r?jqCt4H(qcaBO@KHt10>o)_y%CeZ^nUtS#LR0YOv%5)|Rsp%^VO%Pz%Xdui z>arb>xpjH&N5{zLbvQZ0cQb~K4SiH|kUV2^sa&dx?9o$zcsMFVt$u)Lnd!O2jXE4e*3g2VCKvxl-Uw@zO3A}g3S z`+3_uA8q=YQ*T2ZVT5!!QcPwTLxK|{c(>w|$O$5CfMf=a6(Oz)$4_n(tK4|HhoVn) zN+2Fcc9E$t{*q{4+)&Vk0jC&%2fP3pEdUph@gt&TPR)o9()f#`4={_)fn34S; zQL`-(O@k8<_k9;4{*;~;%k2}q@djvc0^ZJ$IFuOvRo`y`2Yk_lpE(&ij`)O=UMC(7JId)VzJIXEX0X?`jMUr$w@I5yOG6y*mE)R33@d>J+r4WvCdMKn3z7b zrxGK0l$d4q=N!*2TW-$|f?URhwrN84*mQ3TAYH(0P>vw=?#`C#7WSI$K3R{3tTDsv z@H!8=l7b$a-DZ~5`(Lqj~;`C5x>K(Lj^mll=IyT5|~ zzatgAVH(VpOR1KO#iyH4R3FQ(MO>Wql&9?KmSJy{GKKNzW<#FDmM zNPCH4PYE<>n0^xOlLy>CqPK7zMy_2IQ^4=TZC640@Q{g{73*SYXX8N_!&T>^nAdmpVeLT2?z?nW@6HY}PZ z5e>F(hINdwbXag9im>*0uol|3Yu4`y#%>Fp9?;W@fIdm`4LcTb#ZZ`rBc?v=7i)LuCmhV)^CdX&;vY~X zBN?x!9KMu8hgF8NPW325GlIlYHg71UGlpK>3s>5}JR?NN-4ys*U2HwZT7Hr5Ib3g1 zDg}6$gCKBAEedvktzM$%Kw%tyMrHXAc&Q7fRq_rQ=W90v)0#dv2meOTyYNJbe>}#3 zpTx1E3gTRVXPfv038;DjYKX;nP%AIS2K6Xf1276?lYcvlgDI|$@ZIxp;wQv*vjW_l zhpll@w0o)gjsmN37Ut^l#cK$CIpM47=!@qt1QH!6WYZ@oX*a7zzMfQNW6^Tr9dmrz zAufJY1XuhBwDV!rY$#p@$XKh)-X zR&g$)qck&eO6GGNR15;X%1`Uu1d>GbBWflcZNxtoYU`8P3N-lyyoEvIr*IXOu@K(; zT6z3L>WJCMam&Nh0twc@s>p<)Le@^$w^#)sgHU?}a$)2oP0kp(tPK4XiCE;Q#+Qym zf8`PK&F=BsVg?np`WJS@`+!w0|oiZ5vVMqB^CRW$l>@CT=kr2 z_mROB|7#vr5sz5z@W^?w+^ERx%rE%LU6YJ-ssBxxrNXpi95JZ4k6@s7OqYJO&wd)A zi;6GozmJ7vBq3?4*sOf`rx?mFmo_*P0qg~4#IY>E8Dy5J5*B6076Wn{3k)X^dvV>K zkVHF?gckzgABxs}ecrK2^vDqOH=?9K(wWtuT5!Sc*~LbeRxm9#S75e>D{$A>H_${* z`5^q@C<+^+JUQ=dF+Jv5opgzwjYg<2&AM6;&vM@(M>Dz?!DeuV=RQMe1=2kU+G@wx zXq_;ikP5TSRfs@UnfPtJ{%qj}LAN`Xp0WG!k}etR$^1*|VK6$BTFpyUP8$zGZBK6f zB?>%g3UC{fe?;-vXvBBBW#(n!geG|4)B+BO&FzSuO!5jLC4m;v3z%EI%~&b;ss)+( zW5^i$OEr?sbu{lV+h*?`mwUoQEtjK$e^tdVbmbK+3cQ7yPJCfRFsmA7Ho;*|peW(f zN7z`M8af_~QMm-Lv}o_m!+il@C&cFYA_k@k-XleC_+|s=;`*Z1G)#%6S+EnhIRSsY zVGoIP*Dn(r5@!)7-hCmLG!yZ)%u3a-^ppTR3N1ZGOK?d#oV?2eLqk^>8l>36SZxR= zBy@Fd8jswimx!-stymL(0@n;gKvSMjg`d=|mt1_{n}rak8ide{JZnAN+`wwV6&X<$ z#T&CwY3>)R#BvWu6~Qc3Ic}WhymuxvoNJ@MmTHEkltEmYtXR)3l}wrTmH6@KcM2jip8LrU<6XeXeRQ4l~lk}BIz(0x$bGh}0FS7_%wXpLR zgk{L>OkAOpAdc*pM1zQ2^Q}Z@HRijM@#|UHVV|HcTZ-05x`7>U*Eh*d#9OqEVS`(z z4e71%4*UfM0YGJY;EljaX*E^R{oz_cq>apvHSq@wsY4|rsK^Y^CDnT3%*S;Etq@F^ zd}h4DBHFC390^v5*7Qn<0~1evMZ8{6D2C#66oL^oXt2X4>IEb0IwIO*+ZUDLN)JVS zH~2u=k~&8it?3RZl?jkt%r%q!>=nn?grQT*H?og;mrXn?S5AkTl|L+$$x<-PxU*aw z@)udYZGraP)xgW!YZeGa*H3LzSmf{EfIs zA=bp7K;(J=l!Q?VH=%vTBw`yGN<~Z21sd>xPFBxfhaT|(@4MMaaj;zzXPOE;Sp*gC zWr6vL34HclA$hF427hoQv_eKj7-8S?MidLhzLC-qtnwaxS1ePh**u`B){1_3KaqkG z*n|^fCc!HBpD9z6SSJ=WRk@kOg87%CM~G7T8n5zAFp6HOW&G&LozAks^FJg=_%G&r zTbXmk;K-ytt&{ihBO=(0g#lhXTDUM9@~@190mH&cg8VTGJai36YApGm%Uop-7P1tb#Y(gJByM z#(y8rs8jPaX*7h18HL93tkb1_3cNpRjU8o6q1*gw%_;a3Ty-CG2OoT`#Z0VsO)yh0 zuYDsk%+_YkFF5lCTslI)_P5Zf%pM|i574t#kOumibURp5oSnU7D*chU4qHZh&G^mj z;0^-x7Cv@qStWk-U&0O-;j3X%g#pcW#`(dGGIBE@=uSZ3HbifpAgh>7)l2f+Sh zzatealxi>neio-F4l12HJ#mdR*h#L`Vo!vpb9oml z{m;wPPOp5UsGUYCj0rQH!C?EnL?FJ_&GK7?&6?lf<~x!;fV9MatT}7=BhwyGr%hN# z=madA!C%sH1mt=Se9QA3?nF{+ybgaUu~-w~_l}Iwhdz;`^kY0%)YDCva|6{+`8Jp1GfHrVf6;Gj%S`*t|?XUEbT{a{c6Vpn=F-+K^MVUdnE?!fU(;GoQR z)J!=6hKnL6#c~$~SG`BY%^egu0)K+5-juh2!4>zKhgE;T1EXdSNWy?%{3$%ZCVUw- zF^092qp)?GehLY@No2RM$72tj1I zs36e}ULB5A6s}fH?o#C$LuMRS=?Y+kl>xr@I5uUuiV`KrLiRJ#U;F|0a&b|N z8*w2kY7`y2A@%kbbstxTJ`sp+;>^~-99jVcV$f2_2E<@LS=q}JQhh9GM~mLDihtB~ zFJ{K~f^-C40t1}n2)EAZADUxvRhBv|sUUx~+LiV3jkEUR3&;D1=l zjG$5o*{fMf=hS>knUTmeAybb@7xrP zhA|MIVg``;SbI+$q~jC1_MUxLldbBJC?lOuXq`E!CRt3p`D<$bTpGnSkq=Pk5q48ZrfG z#43G-%)88i2UzoUdusaEm$Gfo?C62Tc?q{C@)9x&^AeVrD(IR&I>fVezv%~g1%HK_ zUfb)z7Iho`2PmZ~>kMYUq_kf}QJv z^&bZJ2<7AhOZHycYfrRKQG70LE78=dSAd0R2H&@mL~!GVJ*<&SNF+0FQM$~D^vQ?= z9$f++eHc8v#q#VI*A?SgVZB39?~`_K&G|)ZDz|~LGvnlR!7eiZfnO}(YYun3nBDrq z|qkQ?oC*gBFcseK!(38pa#6ZG1}#%leIjW605S1$VRq_O&Ii}9q8vOWEcy*R%Z zW$%5_-F?hX8XLKbjr|;O)WLDDxw-{uvCiS(F4zTrCf2|5cESot`1ag2yGF{liaR&9DP)P6T-TRgC3z%l-du>L`@Nav|m^*h1JDPW7F1kXX_* z7Zk4<^vT6cJHt&YUD~fT)XCzQR`Jkbc@iH0=nQJyOQX7FIPDr-zNof@f+sUG(ftI=1RoT971@*G2( zVG+;H)DlBoqdh>YHbON@xjr4pHpoGeRA7E>T9n4XTaLn4{JPuwAl*<3EQ)SLVD zQTTQQ#}4;??z8T6J|__zzJhH8cyMas`Ddjj^v2@b#P6P-cy;3B(-Z%ic;3Xs_Q~PY zksqxJ1kOFH;tTBKE=>myhmW)Vi{6pp$NVKYd>QMXmH68m$nRw~bGiM&w194*Zt`|K-4cIq+W& z{Fej&<-q?N94HCU<=yrF=FXTqf8jOd)8@>XKYdzc_WXI}GZrqKzwo5;%aCwod1U_l z^2=s_KM)u>FFI#VMPS5&z=*(xBX)EjdgPAoL6|daGQWJ@*}osa`?dLJqyB(_fqAp% z1TLFDf6k0)^8(RDGZtPxEix@IFFN2RjNL@Z-N%`zW`AX z^q$&z(zNlfowW59@+gIAk;sg>3nJw4h(-MWun~(6D<3(HkB~rgMnzr`HzzQC{yg-F z8T0TjumB1$f8pHnX$xmZX3d=unLWK63h9GCeg519(-zJsk6bNn3G_u?=(Yfwz8X+~ zLSV$AlSW*A5}%-Ofy7ofCi-2avRI z#)28sBKV0!7qXAcz@LTD8G-1$2xNEltl8*7M;(R#j|xoq|Jr-^I4h_A|Nm+xN>YO` z=w?VdNKL6EmCgs9rlSzMJu`a_H8XqLdrwUXA?GkiicrpnxCbGGoJkmjQ10A!2qA=S zYG2>yTI;>8eO;sN`+0nRzsKYE$IpIr&FfmP*LuI#y4JOh*QvfvzrIeNzRvmlHBGG_ zJK@R*VA>ozk!VRjry^2QP9k}cib!RoN)=!5A12{r z1-pT^-THEzR~)G*uPjeS;!bDho5xb_j{o77|8P34fB%1K|9^|O>Cv=*8+T8f(gu(h zcMtKc-CyC_I{Fi~b00~$w3%c)TA@y6brBU(&Wfry`e*y{yl6ZxQWJ|u5(zcvs8gq! z2enQ$JNj2u1{jOP?O16W?$V%4!UDEDwuw@M}MDRv-{y!LdPMHSIR#B`f!+YXL8W2TL( zzKFgwUan48!t_nPupXzY5%g~lokU`GRWe+YR}q;>x98A~DidlT4pSkh2&x*<$(c?{ z)tYv6WbIVlG3AhmRPb?iCtS%ir8-)j$P;(%y+TpLR$dJq)hsn`4iz8XNpPI6{z$pc^S?vhz^2e{ zj|gwW7S}c4vwSu-PO-$f4t#od%6?th7oGR8?xAjK=8G^2~tVo^j92;yO5bUk?|upGZbxvRfLdip0azc2AkMAD_4NmRxD zXU%a6+q>?=Y`?P&?%=vNvi-<*UPtad9!DP8mUMF6^LdqELTA@Kvy1C)&L_X!T=$z3 zTsPXobq_t!bsy`+6BQ@9ZqMGXd*#WlyR?t%KFfA+Ki56(6wXn9*ImhW?EsE*pzD4- z7@Hxk`^r$BQytF##doUfUNFjaZ)GbT5Lqs7&X@+vW>neApt5a%kH zzKLWp6W;#p#+_)4xoy0Vsjk^mi$VDn3>Y(FQ186zDz!M&BZFDUs(Pyj01k-tOx}Qk z5jum-C@=bQdhxtyNnSi$#jKI_m1Wu?Tg0Y~+rISm?(j%Ey zxvHX7$5%y4SzOPI(4Z(7mVG*kL#5`tdIOd3#Ok8)7F~I2;8nvTqqZDxJKA0e2JJXH zJu*p-{609aQWCAoixy6&NSttjRkmK^m$00R6d%PIOpoJC#i}b91t};>kyWoFGL{#CLB{pq_+G0+>s+#Sns4M`LnP(S`7f0ghQ>LONq7&HRW;XO5~QYI62qQqJtI?d z51>E3LJ1)pA2hO#hz<5iY3maCrf zEF!)61mn>v9`peZdD85w@Se7Q4fKdFe5LF^BKQILo9rKszv`;Oa7CC^Y;m4sIDMw% zu=EVt%iNjm^1>w?H9cqB5;Y=vcD{wOEs(R1>3G~Jo!g(;mM5ys&lV^b4=Tb%W{EFt zLR|ro(%~USeR8_kKB`ND&T(qonVO%U?;L+zUYmU7+4?n=C$GJ^IH4+VMYt5V4fR>& z#cDpFdYDL2xwjTn%WItn8$YV+raIWRMeS4{rN(%wr)r#^f9Sd!KXP4*YX5(`m5Z=d^rd+Ymf$=@l0mRB}vzi>9~NL^;3?Wv1DrX7}Yv_)l3X`;H2 zo^}>j8w^1SJBq80agEB!@7nEz?mc>**z2TlVNr3U#77JmIB4*Yp;W6v+FhZ#cvPq_ zI{ZqO81xj>|w;kj1>i1!1Q!F)JLyxQq#*azOXt3^A9A+a{WsN~Qib%F0rc z=Em~dtHDprum9?2=HCDNzfJ!?{)Iw}Nv3xSg(BzB6NZb6`K!(lgI09~e~Zgy0AoMK zMdeVax~h`DOpevxq~7I^3@GfVaWwFo7YI4qPch-mgADc>)adZ+lee{W9QEn2+@>iv zkFS<(XvX6r;8t)NxOl&m+Z4R8Mar!Kr?=#~3AhAY1$N9yxf{T0a3}aMn9Ea=--5ls zmHVgMDd77&y;lRyI1qcVdoK3iA%|iQZafTo@WI2mzQMz$IjvJ}AMl^xRIuAWQtn*v zQ*bFb?1+@R8eDQD*JQwYa2I%V9`*-1PN$==2ZtPuJs4|)J@_whDfsR&*n_>>Vh?@+ z?gFnmmi)JJoJsA-KUmzJ{DTK|AphV`;9_uiNAeGT0B!&qbH8FIIEZ^4xd%DUzw@yN zKkkY>_+mHg!M*qv)?#pU5A4C5p4fvopNKv9J5My{9_%>%dSeeZIT?F!BUl4g_r)H3 z1zZJw! z0{dLY`2*|)-gGMV;Fn+xc*iKp4;(R?@&i8xH-hWNP=4UTv6TOzj?<-p@(14pr-GM` zqx`{v-F zU=My-fj#I%u?Gjmum>LoH-dYegFRRTw*CiWVjO$$#RT?X&m{I>-)ii^UNf-=51EBM z7zcNO?{VLy^%0Kq3)lyIje9Ut!4cQDA5pW*39b5*sTY)|J@k7{y!yd-|Siac==7DYgi9NU&oCa>H z!ydf$5$wSa9>pF!lVUj z8|bvBJwAgy*lsoU;E&)maM`oigC9MIJ$Uf**n=C_U=M!w0`||bum=x+9eeQjH?RlK2RDN+fetV9%wLN=_!-zA?D;14;QQb_u=zUd!BfCBU>w{G zwtFk(Ha^aAO2A{ld%?lrHn13M`*zBm4^Dh1<=zE;2EGhVtxvgIz>mSkynplBd)R|r z-^U)j2rLGtug4zz0K5xa$@TY_!Cl}MaO#KHGjneA5%%CGT&EuluJ{Cd@WxHpgAaU$ zJ$TZ;um^7fw}9_&#-6u6$9|4I_>X^M58eP4gGYXmaxVwRe3^1rfG>WPa@T>qw{l+= zJn@^9+q?_oHrNTQ*p_lffoFfuJzMZ@Z~^$>57>i;{fIp{0^A1Hg3a?CC+jEd!HwW3 z@W&n4gN46f4|e_)d$7ZA*n_ioVh?@}Ht$Nhzo*=MF!e{uEdbx%opO`lTd9=05IoFH zxhug!$930(iAJuw1Du@Yy1Cuxr@>y}IoYl|1?=9~b!)(T_Hy0D;GiZveht=x8^Bmo z*WC#ow-5Fwa9)~W4>oR&J-B#3?7__~u?J`6U=QBBKlb1pu4C>5hjM*0w>#rwE9}7@ z2VoCpAA&vj`=Qu_546S}e4p!Z8^KP)Tz40k1Y7rD-oSOaKHzoWRPZTqE?6*v>wDmO za5XrWYj+#L)46uH3tR)X?#VbZ8hfxWI2F7GoD1&H^}VIwcyKlNI=B%WJ{EiMEwJ^8 z)YAg&!56@(;ML=>2M3JD9$XBr2EPY4f_W3L2P?qVz36|yKH!jv*n>BKbHQK0rC_tk z*n>S!!yddC+y!n1Tc6}OCrrT}{1KcAPCp%c@CR@yIO`1T!O>@8500IRJ@^FJy0_!h zoP|9&<817~DIx5^7pGwl{u;&}Jiico@M&-t_<9lcCsWSF*nMI#t+%L%^lr=iqAapeXj>U~m`sMGX6Xw2L_Q;6`vNxF~@=xDH$jj!0q;E&w-z zwbj^zZ-A{&p+B67J-8E`3hvAME_1;UxD(-753mU3$PzVzi>77;QrTO z555V`1y8*md+=v)HF(So*n|HDcYzZYVn3Mm%#GNC7lTv5e}i+ue=NctOn|Gwjo?PG z>rL2$mw~N^kUrQ4j4s9={2rVOZdignm~}JuU?*@RcmcQzTm`ls%JJNSJ(#-`d$0JUfjv0*A?(3t zA9mekU{0Out^v;nH-q1S&Z)HDM_e}#T=^LHJ;3EFU3VJT;c?fU2R3;Ed+;f64cPZd z>=nNX`;pAAz&vo=Q`mz;p2Z&A_c`pr-p^wXz6h=XPkPC9w}4Z@#-lhc@EEYiE8Noo z9|emQ|C;O02V1`3x_5y`uH&8+IPGoh!K3T3AI*6Kj{(*HHaHmE??ddtQ^EP*E8tz= z(2uYO&j+`FtH8!%n4fIG9=skL47y-3c-F_*gU^6>froyAJva;80)7BC9?QJ z8?gshZF1c*u>EJQTL-FND+5lWIpdv1H93tAZ{DP7Z6m|CM!S6XZnukyGq_2Pf@9bi z+MMmb?RM8>vC|@FXp7uaTkbon={)C@!+Li-;h3Xgwcn}W<-hNCwV@*Usq~U;^Wf{0 zz5G;K3)mW^cDr9IZb*xqOS1;;w|CZNa^yHlU%|E(UFXN@C0f?{I`ogxuLINemwWcx zpigyoyPRU5KG4&fbKKSF3_WQ*miFHX{Tg(-=Cqzn>!Z*gM1RAtXRY!4SD;UHc-8~- z@|S&ZBNag(Km3G7ti=QN*LwCV(BDLVqp{z9O=D}n4n4Vd%KcBk{u9rB8~TY&Qtm5Y zI{no;{XD4VoR5u7Q|>!{`ym%+XT6|Z=se~V=dyiLZp0raYpRz<0s1=h+XMO{PmiIG zY{vgV5YXp%dM*0H==TToWu9J#e&W8&KLdJ^r`Mxjj6Obaj3c}<-j4owbDp#D+gE9G zeSA6DzYcGHG==<%@^JW2knx}6^pN#%sK)*xlxo|nutwtcmr*}gC5@}^WO=*v}5MBH442B{j-4m2cCTedew0$_tAiU zzo#!icRFz`AfVsk=_}CZqpPoXr|VyVm;ZI>&mNz052lYx>-%LX2daK=sSIN1r6;D`X9D(*diJ&GS-mKOfc}`L*P-8r zeym?Nr%;zqJ^EefU--)~d!u&_x1*Q$<{47IeO86%Kc^YjztJ=G5&7ut`=s1M0)1c$ zuMaFhKk^jXV4x1R_Ud2^{g?q<_YLGP;pMLuecnKxKMv&YTQ7fg=o1H}T=ky`rR#XE zXJ3y#X)w?72GUP@>2F7WbSUpD`2G9la5?*OeH#5Hzn*oCmwrC_&|y4t8%RIjOTPd; zH2g2dfAlFMQf{k&{l1=kE&8ZaGxw2o=#56E+%E(6n>_n^^w&nETrOXw%V)aIzOEnJ z(LX`I(ywP-=pA29bEf*EQ|<);eWs`9qu+_HJ};Cm|2!}K0`wJQxE>g=ztgjiq4ye_ za!(D|5Af`3(F+Sw?qPxRx4(D(>d>c-&pbxfqhBx~<<1DCU+AU39epkOX#stVr|0ZP z`A$r^X9x62o}Q0>3VKc;|4qF77oc~UL?0K>hkAMp{p`tH{|xw_;rXvce-yom-##nl z>2>H!PUF3ufc;ONUXPxfl5+nQ&_DF_?dT_PAMMP5KHk%FS};bTPYaa)XN?|J?jn6e+<27D$n5u^x2+Xi~b7woPd6gr`Mq$c~;7OJD|Vf z>GkMup%3%x=WE&2fAk&b8~l3KJDz<`OX~00Dff(L0AyZb$$5$v(-2>1B{$9IBvd@=OG5}yAK z*#GF+*P{0+%{)h{Lw_4R(;A>2y>S`$B?A60_WW;0kD>n>(7*Haoc+mvdCFZB(69FN zeDu}mw*~YYJ-q;3y+b!Hpbz)-82SwKOmoCq^bRwqKYsf%ZLaHY9eQu{jOQQyee_2D z^3U3-9pvG2JNn8B-l_EKYL4aTQ>4>qbpUgW%FNdxx}zUlm2%_$JZ6=9$2bwa41KLX zjqDe^I*>#^AeM5~mwml4BElPg96i%@sFmo;(TDo&&(r4m_|~JphMuVn>_9)^;>>+`D=yOYL?7e# zpEbnGUw8Ck^iV*b?CBHH??lfuh9=QJM_&=JPtOq+qF2sOxg!F4f6xC)^hM~G1oXL{ zz8?J#^h{&G4)mih$=pY_I*5DJ=zaYD6WYBl-|pxM^jUsAtIA7%BKlhNNI*|tBTJ&U zyp(rs{kj?AwEut+h3^_A$u(NFa2CV6xI(L?Bu2I}AaUj5sF{^MmSx5{sy z74h=l>R{$Lm#5rw0=nshRQu_UUW=Y-jx`beQ}pV9eR_?NM9;q>*{?_6ZvodS{OO;YK7TvVyQ0qv*w6CpTOGo+`>QiwXXuXp z0{RUB`zt;BiRj(0&0Ic7^b624%`q0DH>%A%hO9*IhMpTpzonP{di0LhWxh_c1AWZ( zDfbC~`D8tmKL1<@+=3ns=uu`uQSGoat& z=?l?wZ=`+)j<2(Kd@IqrEXv$I)}xO>e>GtLtY^OieaB6i$DdY*a_?+0&te4f_l%dn z?&x!tWS)ahM4xms@7o3JAMxyy=s%!e6IerE;;o?&@)}DUWI<&otfA18_*B9 zE9IW=_n%emmGMsW82Whu-CPJ!eS9u|-a`LA(1yP7+E6d_Tkc7@(*yQl&;JzkFVM#Y z^z=Nq2L0fBdB-}S|I4#qjQ$yVrZHv}dWZWmuX8t`Z$;0vj@pTyb3g0cK>DY7>F54~ z=SI-)4(Llgy%+ii=pP5lr`{`{Dd^Wc$T~Qnzv1aM==~q!UO-@uyV;xLE=J#{j&E%Q z?3;V`tI$*E*9P);sh7VE=#`ITo`dZ~e-J&>IxY7I=8%svhYt8RlOT%D>4o0rvCQl6 zDd_K_&kWd`PAm_u2EE-%=BWPTSL=}TbrCo!&QjuB`$U5_pyHV2wr*!@h;#FkTu%v< z(+sbiHlu&PD)V~RIg<6>Q@m>*u;1a?=b^WGCi6Y3{^%>w=LhW1_3Wpi=RV8*x`6(* zr_V$G=DEys)n(}WKc8~<_SE==nIq~<>}3p%iIl$_1%R`bIoPSKl-|W z|CiFok3Q#>%wzFp^hvKWmurLr`^-T0Ft2=^qqtx2TFNa8_z!9Sm^yjrZ=naS*Qh#p zo_3+ja4>PYzmamU52SI0j-Y%Lqu;ZZ^{QW2K3+`wP@gCrzb?gtEBtIevwroC^FH*h zZ>8MP0e!Hizm9%3dZv4WThT9lJLRhX=gIS*-PFrt)1w(P-)Zpd0C~(Zx3BbZb|OyC z`pnnnMxocDFAwB#v6sgR^!?w>e1CEQ`bzY8AdlrbkE+jEfxh?q%o_swLQh|Ze)0Oh zxc`g39er6Ke>ZvgYtBVY^$m?@0($!1OegexKTNq-1k#`9r9TQi`BCP&R)K!k2A+8h z*k9$@FF?=zgmaih25cS3KE-P*E71FI%zSTR9r}~#Z36xe^Zai^e|i(oMhA}XqxA6~ zLtFYRb6e|#e(b+8U%MKGz6E_xbxfVV3iJ;)GiC(x_llRl1?U(5oBQX1dF6Aj*7NYc4*i?2xHr*(fYpc7&T>0=$GDw1KjgR>@1f?j<^I+Ie2*6wo)6#k z*L?H>^w0fz)&|di0s8(2^1Pd0_gy=Pp&yUl-mjbPMz^tA^d9Ip`E}p@r#kc%=<@@* zS=_2Ju1C*l<+}F;^xM7sZAV{>p6MQV4mTDj9n7}_0`_Nn_W9^b(TDhT-`b%7{RQ-1 ze%)MN*2fn^{}?^fys#F%*&%#X*>9hfem(Q@4-_yK9mCttcE$H+7 z_F1#MFU8Q$LeDgw)uQin7~gmZ z_Odi0_HaNSOUKBkS= z$81L*e}tQH9L=HcxB&gEK>8EC^z+eIqfZFvr+Rt;`VZ*O1@y-~oo}}AjE?Kh4(Mj# zr|MTN`j_aL>R%oD$UN7*JYa7+DBb?iA4C5zpugp%za72&C^zG^_neOSKl(4)Kl=6P zF9!TS<@ql_@7~7E_GkN{ z+GQ@E?dUh7_wlFi>z{LuKcGtTF8I`NE7C%y^f_irv6 z=>8!eeG>W`e%<$sYXN!+y?G%0Y%l#7`Zve(Eu4UTt(X5=^rFtL`#?Zn?&)>t-=U8T z=mR~y9zC~<>kjhkX86$g-;RDV`e48AyEdG2JlD?AGqvx0^y|?xUE3}||LQOF7ElQLM_1a1UpJ2znBzz9ik@jbnA4d#Ci?Qg z`CIIrzkKu;y7673fS&a90`w!gyBY7_$IxrgpZ4c3D}8OW7X5%8eE-O=`>uV~p|?jr z&#z~tuUpllUxJ?T{G;E8-q@f2tUtW+%b{Qv^mH>`m&-@L8~y%3`pZ1~0`$%&y6&X` z-Q1j0{c{X`A^L&Y1ne9&yP0?Gw-)`f-mW__U_a9HUx)q-dPP7l^7MN2CMRcZAKTHp z{e_;B&-?^^fZxAwe#JLCob%B$-TNp&|FMso@&0)Xy|i!U@v#d;4?!ZO*fXZ@Bwe)Qw|XKr8H(PyBa=|8?K-}5hBS*xR$1a$L&ojQN&J;rT+VXxkA zY&U>!cLnS(^zs)&zYcv`K=-wO^moxS^-p!^zo0J+*k9%OuSYK*n7RIJN52*Q{D6J> zx^NB?!#~iQ2Flm<{O6CG!OZXd_SwU|^A|%;4&gnPK>BBT{%g@!p=Wvq zxek5j(9Gj&J^CN$zXbem^Zai|uOG(xC!nwQ^c-#~Ts@rn9ni1z^n7$@gzK&d9N(SZ z@fDyiI5l(oiJ?D)p0WQ!A2yP2xCQ!$nO^@;hknnP%>7S2dY7?$bIzZCbL-ah|LFbE zGtEzP7&tydKgVyMmA?0zkKU!gbw3K|Z+qoafc_===>fgK(_`pIj&n0UJ5Y;$Hu}ka z`?xmO`L9Etjh<^~p92z^ArKK*P$ z0r~>;+XMO{FZ~$$z7sgV0o~l(SN%&Z`gHVf0{Z8keI0uDiF`-OuZPp+Q;**7FZAu` z!_g=B?X%MBmmCJ(bI~*1m&!+9i2iZFzTV4U0s81ku6tQPHxJyn?676s=Bof?Rm6Jecv|pdUU#gw5`mI^Prkj>9?RC;Xilk zI(?3=UgrE0=d)?FKYtwm^PlKj!$@Fe=C zb6oe;fc>+c{X+DMsSH*PkH`x`|^Ck#hKekFZ2ld+l?u3ZyooF z_YCS3^aC&Fo4|o{e7ARwYtWaY18IA+jMe97F~W1`=lb<5GZAVHw+j8xE8L9FkZwSq zgHD&1_V2q6zZ3m>beck1KSyUzr=QCOpcUwqem$$$%YQHQ|NezO1%2q1neA)PZ$Ljg z;D3_me=+*If1$5JZ+TT_`wi%$|3cr1e$`*-xu@{`4D=a+{1tln>xJHGfxE}&$n&t7 zg8mKqoIw3LN7paqQmyai5@+}|d;?k$LtErrn>C_E?lsv%TI5~bcu0%(3-%h^BLC98 zhqvf;ag$*!`d78+HK0ZQfEMisw#XaUB6nbmoPjNxIysoWjGq{O_ELWS{{3A7f0w}D zCGd9%{9OWnm%!g8@OKIPT>^iXz~3eCcM1Iess!e7om>6-3qF{mE`)GzMDR($HG;1R zzAd<3(8k*&;VpvS2x_PNdFnvp|5?G81YZ?=Q}8{(4+S?0+VnO{_&A zy<1%X;C(F#_Yi%qgqJ^P^vfjt==~@;Gy~37;$e zcD-rB4a*@@{vMJ1+5BAAAiet~J?p=x#J^C|yH@hsFujK12POU)`XvIcKTEkam2kuO z4Z|<%5AyJBnGekIy&>UOJ~ZLCB|P9;6MkR9OLm&@Clc=aoe6&~;X{5j;V&iJ>^&3S zCgEc7_mhOrUT^eYCA>}Y|GR{{zi;%0`9Dqio4cgG*?#H|sbAMf`HavHmvf&;!k3AE z+rJ%@+Oz+ok2UpYjBE7v624Tz$4hvPgu6-jc*ofFl<>_GK3T#|8X0|{gd-9jA>o%K zJWj$#WtsSsBz%E{PnYl}35O&+Jln)?SY8domr8leYiHuy`uCOe16K)OE4WB-so))g z_X$2MxKi+G!8L-f2(A@;U(l9*Lp(z=+}viI=XBI>KLbv$y-mIkm2mxyCVaSrn+hH# zxIuJvtz7-A{)>ECahbYrz|USYT_q9rHng)r^kx#4?!(zv!nuM630e>{r|dS9Kl7LL z)qMhftqeF#1P>8(jxalxSKo0`Kb!CT159`y1CC8!%)EGi$Sn)XSDU6J++X~;61Mr; zF5wU5K>sV@rzM^Lx1nsQO*!Z}U(R=b!2-c)f-%8)g0+In1nUIX2-XX37ThlA=$pg5 zBO#b4m@n90ut0E{U`%kHV6EUX!8*Y;g7t!%1-A=2Jb$EqIf8kD`GWlg3k0VL#sudH z)(S2YtP@-#STAT&`=9@9y3CxPVT1Tz5!+8HDQ})O=cINJp-^;P>+2`KLcJ}t#agcA~*!CXe zn>w}~1o?d&+kS$4Gsm{mAWvhn4bvxNJM?b09tQaRoV-2qEu77JIFH#*OK1BY`5b4N zesIL+oZW0^f3N@aE7{HgRK!2G$86_7r)m2=@vWSlC+>+q$g%x#(Eq`X?T3T>Ab-a6|I^-vUu?ip-?mkJR@e~wTes|v6aM#chMz3)rwO0n zc?$K@-{uC@JFLpjzNfImPruU$o-cf#{)**US_96t!XG)n5U&_BXDQgoNw=3N68}Mo zzh$5y-Vy$B8~+y5PA?Z;Ekjg(9vfr`eb1R)H62&{xN5`KO8m{j=c*gk{BAekY#07X z;V%|mO=Fdx{gxQwY~lA6zV{GA+%J4<;r}DNex4nzqwr%@1K~HG^wjSp;g=6HVX1b` z5aBlnKi6B2%gF)p)P+^Nm#S-z0uS_|H!_#Mi<{g@05UsD9@cP0bIKpQbmN zi27UF>|QGT+B1Uub;9pA)$scLd3J9W{?@%rf$8@R;qMWC(pe_{O9q^0gwK_Vf2EZ3 z2vFtcj*y9{`U~}YP2vwNG~qW4I3K|4{!Qvnd*L@r{FX(A_(1rr!fz3NiTM9T`17Qp z%V}1Fh0f1g!nc+9&4mA{#5mq0d@JGKDKq>UN%tt>uaydG>upEjcM9>D#P2Emhtm!5 zsPF@XzkG%v?h?L0_)gL>oG$rUBgb`#8YubcZ(W0DOZ=s?H0|7Cz?m-m`k97!UHF9X zw@Aa4!*=Ei-za7x4v=)O5`N%0hJQi)EEGOFZiuDA-zNO+!b|gW?ic=h;pOs^Qz!fr zG7z06eqIp%futes75**ZKbL-6jj!tWq3|cxn6S;yzlDEa_-Bml{3!f2vkkFY_&@5X?6z)KjT8f%Vi;F ztnjrL8-A{&8xp?xC5GQ&z=;a)Txy7;B>s8AA9b1G^>?D#y-N7ot}wivZ!8x6Q{kms zaqbX4ex-?jlK6i}_y?~tyd6g#7yd{YNY6B~^NR29oa?fpN(KXi?W z|E0wLMEDzI06#(eZx#Mk;U&AyFTxjGXChu8@plRTj_@7C|6Y5W^S<+X6LE#aKS21q z^aJDk|0)vyP~pE{Xd>$GIkS6=@FS(3OS5;n34iX*CjMCQ(^vSl(x9aoIKzbRCly?O zFB#Ku!jFH{_*rDYIaBx{w;JLP;md{Zf14rxC49B;bL4zYV;oh#i-iAVxe2#1;9Mj8 zZsFe(ezEZH++m1|gug@had#R*nv?Ue@NWvQ=HKe~jPOhDGGUqSIIju6S@;b`cIt&+ zb+;iTdFM0X&$!3%9i^PN3qM~v7&UKJzdwY3{5})DO86#COnvAtc7C;4_}d>h5gSQ9zZZVl6NcCCx3jxT_=lx{ zrCBWoy5aADd-w+YuCkcOn@V$jE5&kLRPZ7RK_?^O^ zDEv&}yR0|Fqf#Hv75;M>c&jA-<-(8s&=BVcf1~hggtz0`Ey5r7k%?F>@s|m|O!y&^ zuKNEyRDJkjgNgX4#D8A+n?5$gP>KJZ@S8p{{9uW{N%*5aHN-rL|E=)LHyXY`;_njv zN8$DR-Dr)Qnf%O`4$L0cLBjtayd7WK3V)ppq~pYYH{t&+y#97AT0h}`-)th<>n)>% z@Aq%ROSk1r7Ji5DVIwLA6 zbv_V2w9WAPTe9qaF8p^t7`~?g=X>GXY&V4M_jU^Z=8uMdLE`VVuQ~4velo-v!XF^~ zm%>jG{wU%5{cH%CW;vaN|5SL}@AVMA)eaN?1o3mS@WUGLLxi6rybN#7IN`heVjS4> z5)!^j_yOX-O!$8aZ~N^@!tW5?<})Gu@xK}e_PWP>;ivv)_$$T#b;5rs{Q1H!7ruC> zABNGW((4mt1dZ_<5qZ{y%v?TvSmvJF2#76fMt|FZZwS{7togzqiiEr!GA^Vy9 zPnHQ<(#TFy;;(IKh#K*Kp6~7|7~sJpCf+M{{y7TVfsG|zfSnyh3~0f0%rXq zd}GN^SGj>uAo*`8{DpajD3kcDg#TK2yKZVNeDY`$|9bJ$M)m4&_xpU&CBpDhc-IpV)m_zl7@ z7d|HZY`H-GlJK*I@6*X77?*S}6#n7k4RNdRR|#K}Z-{5a&l2HJkcH_L68}!&S9ddn zJueRk-@Low7fSq9!Y}J#2>q>1(s)()tuo->Bcq^ z|25$cooW0G5PrSzX9#cm`Ok%~7k-|^|6cflS;o&L!v7)s2g2L=(mpLseTdhX_@_zy zLxg`rcw4X93V-8l6Mv<|&li5goS>in!Y>nkvcw-N{I9}y6aGx$+n;Ovj1qpj@W}@J z9O2gpf3?KFQuxtxjh`{XFA@G0;R}U-K=|FlA7sp&r-eU2-ALsp-HP+3@ck|@{Als> zsqj|`f0ppy2)|YM3Bvy-{K@l-pXY>coMX<*e}$hdd`scu7n=C?{2ng+Z^BUyy*j@Lf9iFHZ*GA5 zxF(QMD@J$z)__iN@ zP59BmFO~Qo3;(t7-G%>3_)#|*Kg$g`JB0s-@LeSSF5$mhY$Bc~@%KHzoUiFO8^X?8 z4iSEf@K1}MHp1U_i;3S;_!ER*FT7o^4HACbQWM{n{{-O|3g1}r6Bd5)t%k7c%Bb+~ z3V*+(n-qS|Z6^Mu!p{}nx!v&k`+;az3V+}ohMy?$uNA&j_zK}~7yfbRyaJCBn+r2^v z{9^h03^7goH#*Rqcl&o_?pWdNdm#3Foh7_|f8>0LUoO0TPot@nL$&bs{g8PQf1dEyK5Qb6 zlla%b>-!fsnF(XP#9t!uH~-T_EEayb@Pq3NKTZ5RD7<|R-}cX|gtza5$Ym5~jqvup zkWJ$Mb>WvhW*pxj{JX;2_e@qux*rR_;c-I@kocbof9Mm2x9xhX@b3$+zo&=Ix5C@^ zQf#~14zJ25Z?P$#0`dR5#JBGmbQQj7D-%B^@fkk!Z@ARYPS2S9*m~ZQ_-efSM)-3i z{-MI#_fS3({wU$QJ!|}&E_{38uM$2ae7^NB{K>+fEPUJNj2}DS8zTI~cJQhl&69SqO!(u4 z&s$>JS4{YB;^(JzCWCf<+gJG0-!l9S5`U!d+l06C`3b_?_kZm1o-KUMJH}6~_^A-y zzCSfy_?g1n_pFW={(N|KT+1Z?`NCf!@$Gv?wtuJyPc>6xp_u~Iq;q7}~vMh9772dw@H9`EpBYf@#LsW^MO~PL)d{p@F zh5tqPPlf+Y`1+5HpKanl`(RVwR)1;;yY4th`1>~+-p>Dz629vu!+$3JI}6|PGs8bB z{7AVjefsBy*WX-2J4xcdAo1<>hrz-R`Im{mR{V^&{x=)`0pZUU{wd*?311=n=r2tC zSB0+@{=hE{Z|mVD!Vmn)@b-9b5Pq%j`kQU|S|+@GAJ2}n_X}^|tF!!L!e92S@h`)k z^PKSZy*)dReMR`EzccZrIXQ1yKR*~=mNCu;!rS-#^mo_D=V!vV+hO7lFwNW9Dty_m zhL`Tx`C0gmI}LB^)o$VK`-b|vYWQz@h-r75rQNN8Q@@t*s(&usZTviJXy-`b?R$QG zh3_nWmfdVJI8FGT5`TQk_&Hbj!NR{K{Ds1g5Z=BgXs<7g72dutX#3TP!rS)-E5*<0 z!rS);Eq|8q_B}$&7Yc9RCp=sHOc&n1S7`Zi;qCi{mj8ECQ*QP>L(8v~d5eAD(DLVq zAN$_n3`uvE@b>+~UxhypUiFiXJbzv&!68PSt0QozMt~E=KuVj%X`|-pWiq6CkK$Vhxd2368`||VZOYdxR=Tvznz*l z`~JVpa#j34|JrBZ`)1(B!RP(ijZ+D~Kku8^_g^^O`gg=(Dn5Uf17VI%bI9F9Ux@2EHl- ze{lwWaR&aO4Ezfj_{|x3^?$nVsa`eVl<$de4X?_%VSVV3A%5Qs{P+xfF?^oXJwGJi z_s=@avF{mLZC(aHi!$){D?jSUR`TSm{{zoMKrVR0a%)sA9y~?3J z7c{7!M~i>^{++!}wb$W$F8{+a@Le+SgW*-W4ckS5j-TW7Yiy27F5f$oGWeOEfj=(; ze|-l2?hO1>8Thv|@S8L6JK$A4X?VQqVI$eqkZx0 z?#~&{`{WFMqVOs|{TuXePEkCWNLH7WbS`p=Bk@RSc_JB!hmw_{qKar$B;kZY#nDh{ zMYJ$n5h_kbmqK$w+bMUim${?m1GZq`ay;6pqKkvqO=pWPG+$5)W5K zLdDgUm9sJNg+jzk2BKENR8)t_6@SNu2t*5~M~adm6&@WbjYnsZ4;>m7idR=f;_+zQ zXz@t6q9R%(F_Y0~VR@-i28WVmm>GxVRmpB8g=W8`up2?MUlA?s=I|%ft#kKYJ$o85 z9-b9Br#f6Qws5*363KYCVkcIeC}U4i6GByySrrl(th1L$hKpvH=qlpO64df4os-F- zqG(l7Sdvt#PaGR6Dyy!VQC_TUCx()>e$S1g|Xz67Moyo zl``^6@kqoMR8D-}eF~|^;?ZPOJYv=$=u5vK6pd9zi_Osw4kf5^>O`v}iANGt$4E$* zGe=Nq3TALf&i|khDvBxvIS(k|SyUC38Z{|WOf8Pb+4ILRb;mHOlHny>JiR)R49yJ3 z!|~FDLq#sBt}2>1TIGM3K0jXN8yt$^km{#20?|Y|VD~16A~lhs>ZBA7%`GOeb&Qfw zEF4cnbgeqwx364FzS9vVaIlH;Iog%3g4M<0WZ2Oytcqd_Ic4EQSygqVQyDI=B0J^D z@@SQ#+azZ)Qsbx-YWB$SaB4Z(Exp_sZ8ju({~i8xi%j>_oFi0PShota%3j?XaN4CNJ{k*usX=_Mi* zc{mv{rJIb0XGSydxk|1w zsUaSXCRItm=q8$Q!pUf5d6AQ#ud1MlncC@nK9#V&5^(klkVAT*25T@ z%9CYYcycHirM?xKRyr&cjjN$kk3ivKniKiZZZuVy(0%?H42Py)IKvbVG0vcOi&Q0I z;Uax#Q*b+ju#=!lnS!jKudpMV$lX+>PSzwRs<nCQE$FPVQmMK9g=TLjr(PW=et}$8B9SDau zB~%fO&Ip&O>RFz!-VjErv0TL+Nhudc1`Hfz0@JH2bw6ln?N0^lKsl1WPW4SybjL(3 zDX&SJsHzYyj8v#Pp;|3jAO5kQ#EwjgqfSE;?O}auMAPD!=~RirQr$PRO0DSxN5c{ z$cYxT6BSS=PYE6&5xua?14c50#k!5Rxl_Y1N!z?tl+X$}aC0Wq>EIl4+KgTrEiXyN zIT6~a3YCN_RD&nmRrE!g)+3T0plOvQ(F)pBsg9xBq25z7P!pMchRR?Ky=cT1lQr)se2 zz*Pj9z=RWt^3p1YUNsW0V1%wPyM?4hWsK10m|Zm=wd0rSpF*m0mHyl8s`)7yD=I0E zRHy-p4qKI@308y?x>QAsat7nodTziVs*9WQP}tQ`-t?TxoI+Jjv3NPhGh6K@%GDY} z?a`X6tD>>E+9@p8d&G;PiJueBBmR-%(OgUX*mqkymo$P9fcv z8jzFDtg>=7zOhHg7YVCbU{W;+vK5UNMvGalMB}tb1v=ZHj-#ppO9=|blvg>EcQuz+ zXHb`q-qV~4>UyAdYy!p$tydH3Pef;pny&^HsU>RsnmC$H#4&rS#!l8Vc|GmWA?mN0 z7^o;AN``@+BI3X+W9({Hk4mOfhL**A0(U}_sFH3K;z)$>MFvFM0u zK_^SL5c94IGu{#{n2ThTiE&)dyp^3g5EfG4sqXN=mQ7A9M`nb(*x!y0Lxg=$#D-J3N2AxEzOr`Luql!r& z;GMAb&aUy!PSBe&vffnfWnQU4ADXvU5oJ=LC~sP)?`t;QlVp87=JnIFYWFc}Ez zF3d~_d?voiqfG)~PN2%8SL~yhF`1!8c^IK5n-%3;^e8X1i^fsvB2BS5osr5|a<-ZX z(i+T=;X4|7=$L5w=$OF-va2c@omF*(KFgGKaj}_i>DbCrU%4QQLmf^6b79@QM=|h) zi**QTf;mz}*|b8`f~f9T^f}PIrHVB$(2fVD&)Ps$^U|jZucl8{Ccf%5&{yN}CB4l+ zuOba(>0PeITn%bG)rp!QeLYiTk5r*_s~wm=ByGarBi-G=5Emb$e&FBMXO*bBB2qKk zDGVnfdbrgK6}_I)lwDcr;aD*aQ+Vx``I=hAsu`s@?@4I^9BVfx5sjPCK&^XJz~NL& z0%T6RGbg{qTw_va!nBccmQkuyl2Ltj$f8E*s;F6_u^aRDO3WU~$N~=46HAL6g8Cph zALYhlX-IaE%z8w{sZOeuiE?AsYjA3zp=WO_GW8k`&g|$Vh_n$sDo3IvjOLsh9bfOM zS$x7N)m~IC6iK(Dp)@p$VUAf^RCY?zL`elTnurF=qpIOBn<(Uhsp=9{4U^qO(o|qo zMACWbf-R3a(S+`@rC|_~v&CMdhU-;{*$LesS*S( z`Y#uMnIlJtTBByOVdbH`%I?xARW*}DaqsO*GNM#eMk-Zzqc5C>Six8m)p=MOR=*sK zil!Tw4QSTnsML5>&Cl$r${(V|@YnP?%BWNo9@IJ2Ts7koNl}<(c^p$k(rv22Tst=; zyTOy|4RQKhBFjX8Sb7zvy59)bKnZa4s2aF1h9XfQvkcpv*0|t&7qP&t)QK%?UtuM>#m1zI|!$yr5 zIEYK#-8%Om1`WT8ro}u~O|XJ01yEHKn;j%gZ4Ppw5fev;(svRjjvl1$BTUq@4q6Hg zyg_{CZPB8WP70OiQyxVPg5$Jj7|*U4LH@BgA_@X|M?J-(FV~%5j|~-MQ8cU zPjXCe=A%eh)sRR7mmzgQt7ryoZ$_wui%w~a?kav!*`G72YE3$tIwD=P;ReN`tP`;Y zF=;=4aw#X)v_W;1H|SiMRK|i_37v2vNU5Q5dc%0!`eCN04v~RFWvF3<5>{bV$&#R} z5<1}^6AG19Myre;UBQbJ(GZJ|V&(wmDrdYwIjLOxD_hs@PH4nfJaAG&OzMiM8@f|$ zn2=Y=^=zX=cizD`)m0pQQIJ!|#=`MWWUMegBS=!w)O;jJhC+pjgcOrH156L9O8-=v zC3`&c)bR%CmT=*$L2;=3{i%ZNsqEFD63knP9^ryqC`7BYz0IKU+#llR8U;+lwG+k$ z&DLDpZ0Mz^CagLWF0Rgr{7F-jhftyFP14c{)FQfu21n;~PRy>Py9JZ#LN}-uL3&Tk zZ{sniGu>*Wb7@s|XLXUB>C|i=RajkKQG7i2%S@~R14kUsJl@gK^^Jwj#j~qO!qLdZ zQ>~~=`08GWKM+Dwqpyl6dod=oopojE%x>pWx_7;kh!i=Ulj?3sXEn1Wc2xHyog-y( zW3!A^vllWx%pFc+VfU4lN)!h=gJE^?y|eK}wQ@SMnAevF?495LXUOeprxBZdy2gI* z*dn)y13wkl|5MNLHDR;%y|RsJG0z0OzxFvAOY~&NZ$CxsEgoYd3flYTmR8Sg`|a&_ zmM!Mlh=L96PlNxJZ-?9bFO&2w+UH;Q7W;Mw$ z{=M&1%Y)9Ue*1q7&;L?HzrFpQwZ%2|z{E*T1H89^z5VXBMH^qtcoxR|EY>x!x8KLM zSoeQP|EUJ{_BkGlH_CI|lB}1$4L{$&-u{0D7WcCe1sj&%D`M|uGe`CWo7xjC_IZL9 z-eO0UzqPmD@3y$DrHyH@Vfvpou(#j&wz%PxpuMesmi>YqULn(MP;vHo%lb=9jvB_d zVT(Uvqp~Q?-g~}t!~f8JH@52dt-bxe_-3)c+^g6`;+LoYrvEg1*52ZQ=ze?exx89qZ_}|Ztep)Xim~Es{_~cJ zo!IBwh=O?y!beE@4ddmA{c#QAtGue8AEk(lAb Date: Fri, 21 Jun 2024 15:17:55 +0200 Subject: [PATCH 2/2] [skip ci] Add PHP-8.3 generated JIT files back to .gitignore To have smoother workflow when switching PHP branches this can be ignored for a branch or two. --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 6ab337b2e4cb9..3aca5e6440c8c 100644 --- a/.gitignore +++ b/.gitignore @@ -166,6 +166,11 @@ php # Extensions files # ------------------------------------------------------------------------------ +# Miscellaneous extensions files +/ext/opcache/jit/zend_jit_x86.c +/ext/opcache/jit/zend_jit_arm64.c +/ext/opcache/minilua + # Generated by `cd ext/name && phpize && ./configure` /ext/*/build/ /ext/*/configure.ac