|
40 | 40 | |.define FCARG2a, CARG2
|
41 | 41 | |.define FCARG1d, CARG1d
|
42 | 42 | |.define FCARG2d, CARG2d
|
43 |
| - |.define SPAD, 0x08 // padding for CPU stack alignment |
| 43 | + |.define SPAD, 0x58 // padding for CPU stack alignment |
44 | 44 | |.define NR_SPAD, 0x58 // padding for CPU stack alignment
|
45 | 45 | |.define T3, [r4+0x50] // Used to store old value of IP
|
46 | 46 | |.define T2, [r4+0x48] // Used to store old value of FP
|
|
68 | 68 | |.define FCARG2a, CARG2
|
69 | 69 | |.define FCARG1d, CARG1d
|
70 | 70 | |.define FCARG2d, CARG2d
|
71 |
| - |.define SPAD, 0x08 // padding for CPU stack alignment |
72 |
| - |.define NR_SPAD, 0x18 // padding for CPU stack alignment |
73 |
| - |.define T3, [r4+0x10] // Used to store old value of IP (CALL VM only) |
74 |
| - |.define T2, [r4+0x08] // Used to store old value of FP (CALL VM only) |
| 71 | + |.define SPAD, 0x18 // padding for CPU stack alignment |
| 72 | + |.define NR_SPAD, 0x28 // padding for CPU stack alignment |
| 73 | + |.define T3, [r4+0x20] // Used to store old value of IP (CALL VM only) |
| 74 | + |.define T2, [r4+0x18] // Used to store old value of FP (CALL VM only) |
75 | 75 | |.define T1, [r4]
|
76 | 76 | |.else
|
77 | 77 | |.define FP, esi
|
|
82 | 82 | |.define FCARG2a, edx
|
83 | 83 | |.define FCARG1d, ecx
|
84 | 84 | |.define FCARG2d, edx
|
85 |
| - |.define SPAD, 12 // padding for CPU stack alignment |
86 |
| - |.define NR_SPAD, 12 // padding for CPU stack alignment |
87 |
| - |.define T3, [r4+0x10] // Used to store old value of IP (CALL VM only) |
88 |
| - |.define T2, [r4+0x08] // Used to store old value of FP (CALL VM only) |
| 85 | + |.define SPAD, 0x1c // padding for CPU stack alignment |
| 86 | + |.define NR_SPAD, 0x1c // padding for CPU stack alignment |
| 87 | + |.define T3, [r4+0x18] // Used to store old value of IP (CALL VM only) |
| 88 | + |.define T2, [r4+0x14] // Used to store old value of FP (CALL VM only) |
89 | 89 | |.define T1, [r4]
|
90 | 90 | |.endif
|
91 | 91 |
|
92 | 92 | |.define HYBRID_SPAD, 16 // padding for stack alignment
|
93 | 93 |
|
| 94 | +#ifdef _WIN64 |
| 95 | +# define TMP_ZVAL_OFFSET 0x20 |
| 96 | +#else |
| 97 | +# define TMP_ZVAL_OFFSET 0 |
| 98 | +#endif |
| 99 | + |
94 | 100 | #define DASM_ALIGNMENT 16
|
95 | 101 |
|
96 | 102 | /* According to x86 and x86_64 ABI, CPU stack has to be 16 byte aligned to
|
@@ -8730,13 +8736,8 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
|
8730 | 8736 | if (RETURN_VALUE_USED(opline)) {
|
8731 | 8737 | res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var);
|
8732 | 8738 | } else {
|
8733 |
| -#ifdef _WIN64 |
8734 |
| - /* Reuse reserved arguments stack */ |
8735 |
| - res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R4, 0x20); |
8736 |
| -#else |
8737 | 8739 | /* CPU stack allocated temporary zval */
|
8738 |
| - res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R4, 8); |
8739 |
| -#endif |
| 8740 | + res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R4, TMP_ZVAL_OFFSET); |
8740 | 8741 | }
|
8741 | 8742 |
|
8742 | 8743 | if ((opline-1)->opcode == ZEND_SEND_UNPACK || (opline-1)->opcode == ZEND_SEND_ARRAY ||
|
@@ -9161,12 +9162,6 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
|
9161 | 9162 | }
|
9162 | 9163 | }
|
9163 | 9164 |
|
9164 |
| - if (!RETURN_VALUE_USED(opline)) { |
9165 |
| - |.if not(X64WIN) |
9166 |
| - | sub r4, 16 /* alloca() */ |
9167 |
| - |.endif |
9168 |
| - } |
9169 |
| - |
9170 | 9165 | | // ZVAL_NULL(EX_VAR(opline->result.var));
|
9171 | 9166 | | LOAD_ZVAL_ADDR FCARG2a, res_addr
|
9172 | 9167 | | SET_Z_TYPE_INFO FCARG2a, IS_NULL
|
@@ -9257,9 +9252,6 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
|
9257 | 9252 | if (func_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) {
|
9258 | 9253 | | ZVAL_PTR_DTOR res_addr, func_info, 1, 1, opline
|
9259 | 9254 | }
|
9260 |
| - |.if not(X64WIN) |
9261 |
| - | add r4, 16 /* revert alloca() */ |
9262 |
| - |.endif |
9263 | 9255 | }
|
9264 | 9256 |
|
9265 | 9257 | | // if (UNEXPECTED(EG(exception) != NULL)) {
|
|
0 commit comments