@@ -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