@@ -3024,6 +3024,7 @@ static void zend_jit_setup_disasm(void)
30243024	REGISTER_HELPER(zend_jit_verify_return_slow);
30253025	REGISTER_HELPER(zend_jit_deprecated_helper);
30263026	REGISTER_HELPER(zend_jit_undefined_long_key);
3027+ 	REGISTER_HELPER(zend_jit_undefined_long_key_ex);
30273028	REGISTER_HELPER(zend_jit_undefined_string_key);
30283029	REGISTER_HELPER(zend_jit_copy_extra_args_helper);
30293030	REGISTER_HELPER(zend_jit_vm_stack_free_args_helper);
@@ -11716,6 +11717,7 @@ static int zend_jit_fetch_dimension_address_inner(zend_jit_ctx  *jit,
1171611717					if (!op2_loaded) {
1171711718						// JIT: hval = Z_LVAL_P(dim);
1171811719						h = jit_Z_LVAL(jit, op2_addr);
11720+ 						op2_loaded = 1;
1171911721					}
1172011722					if (packed_loaded) {
1172111723						ref = ir_CALL_2(IR_ADDR, ir_CONST_FC_FUNC(_zend_hash_index_find), ht_ref, h);
@@ -11765,6 +11767,7 @@ static int zend_jit_fetch_dimension_address_inner(zend_jit_ctx  *jit,
1176511767					if (!op2_loaded) {
1176611768						// JIT: hval = Z_LVAL_P(dim);
1176711769						h = jit_Z_LVAL(jit, op2_addr);
11770+ 						op2_loaded = 1;
1176811771					}
1176911772					if (packed_loaded) {
1177011773						ref = ir_CALL_2(IR_ADDR, ir_CONST_FC_FUNC(_zend_hash_index_find), ht_ref, h);
@@ -11808,7 +11811,19 @@ static int zend_jit_fetch_dimension_address_inner(zend_jit_ctx  *jit,
1180811811							// JIT: zend_error(E_WARNING,"Undefined array key " ZEND_LONG_FMT, hval);
1180911812							// JIT: retval = &EG(uninitialized_zval);
1181011813							jit_SET_EX_OPLINE(jit, opline);
11811- 							ir_CALL(IR_VOID, jit_STUB_FUNC_ADDR(jit, jit_stub_undefined_offset, IR_FASTCALL_FUNC));
11814+ 							if (Z_MODE(op2_addr) == IS_REG) {
11815+ 								if (!op2_loaded) {
11816+ 									// JIT: hval = Z_LVAL_P(dim);
11817+ 									h = jit_Z_LVAL(jit, op2_addr);
11818+ 								}
11819+ 								if (GCC_GLOBAL_REGS) {
11820+ 									ir_CALL_1(IR_VOID, ir_CONST_FC_FUNC(zend_jit_undefined_long_key_ex), h);
11821+ 								} else {
11822+ 									ir_CALL_2(IR_VOID, ir_CONST_FC_FUNC(zend_jit_undefined_long_key_ex), h, jit_FP(jit));
11823+ 								}
11824+ 							} else {
11825+ 								ir_CALL(IR_VOID, jit_STUB_FUNC_ADDR(jit, jit_stub_undefined_offset, IR_FASTCALL_FUNC));
11826+ 							}
1181211827							ir_END_list(*end_inputs);
1181311828							break;
1181411829						case BP_VAR_IS:
0 commit comments