@@ -2429,92 +2429,22 @@ static int zend_jit_trace_exit_stub(zend_jit_ctx *jit)
2429
2429
2430
2430
static int zend_jit_undefined_offset_stub(zend_jit_ctx *jit)
2431
2431
{
2432
- ir_ref opline = ir_LOAD_A(jit_EX(opline));
2433
- ir_ref ref = ir_LOAD_U32(ir_ADD_OFFSET(opline, offsetof(zend_op, result.var)));
2434
- ir_ref if_const, end1, ref1;
2435
-
2436
- if (sizeof(void*) == 8) {
2437
- ref = ir_ZEXT_A(ref);
2438
- }
2439
- jit_set_Z_TYPE_INFO_ref(jit, ir_ADD_A(jit_FP(jit), ref), ir_CONST_U32(IS_NULL));
2440
-
2441
- if_const = ir_IF(ir_EQ(ir_LOAD_U8(ir_ADD_OFFSET(opline, offsetof(zend_op, op2_type))), ir_CONST_U8(IS_CONST)));
2442
-
2443
- ir_IF_TRUE(if_const);
2444
- #if ZEND_USE_ABS_CONST_ADDR
2445
- ref1 = ir_LOAD_A(ir_ADD_OFFSET(opline, offsetof(zend_op, op2.zv)));
2446
- #else
2447
- ref = ir_LOAD_U32(ir_ADD_OFFSET(opline, offsetof(zend_op, op2.constant)));
2448
- if (sizeof(void*) == 8) {
2449
- ref = ir_SEXT_A(ref);
2450
- }
2451
- ref1 = ir_ADD_A(ref, opline);
2452
- #endif
2453
-
2454
- end1 = ir_END();
2455
-
2456
- ir_IF_FALSE(if_const);
2457
- ref = ir_LOAD_U32(ir_ADD_OFFSET(opline, offsetof(zend_op, op2.var)));
2458
- if (sizeof(void*) == 8) {
2459
- ref = ir_ZEXT_A(ref);
2432
+ if (GCC_GLOBAL_REGS) {
2433
+ ir_TAILCALL(IR_VOID, ir_CONST_FC_FUNC(zend_jit_undefined_long_key));
2434
+ } else {
2435
+ ir_TAILCALL_1(IR_VOID, ir_CONST_FC_FUNC(zend_jit_undefined_long_key), jit_FP(jit));
2460
2436
}
2461
- ref = ir_ADD_A(jit_FP(jit), ref);
2462
-
2463
- ir_MERGE_WITH(end1);
2464
- ref = ir_PHI_2(IR_ADDR, ref, ref1);
2465
-
2466
- ref = jit_Z_LVAL_ref(jit, ref);
2467
- ir_CALL_3(IR_VOID, ir_CONST_FUNC(zend_error),
2468
- ir_CONST_U8(E_WARNING),
2469
- ir_CONST_ADDR("Undefined array key " ZEND_LONG_FMT),
2470
- ref);
2471
- ir_RETURN(IR_VOID);
2472
2437
2473
2438
return 1;
2474
2439
}
2475
2440
2476
2441
static int zend_jit_undefined_key_stub(zend_jit_ctx *jit)
2477
2442
{
2478
- ir_ref opline = ir_LOAD_A(jit_EX(opline));
2479
- ir_ref ref = ir_LOAD_U32(ir_ADD_OFFSET(opline, offsetof(zend_op, result.var)));
2480
- ir_ref if_const, end1, ref1;
2481
-
2482
- if (sizeof(void*) == 8) {
2483
- ref = ir_ZEXT_A(ref);
2484
- }
2485
- jit_set_Z_TYPE_INFO_ref(jit, ir_ADD_A(jit_FP(jit), ref), ir_CONST_U32(IS_NULL));
2486
-
2487
- if_const = ir_IF(ir_EQ(ir_LOAD_U8(ir_ADD_OFFSET(opline, offsetof(zend_op, op2_type))), ir_CONST_U8(IS_CONST)));
2488
-
2489
- ir_IF_TRUE(if_const);
2490
- #if ZEND_USE_ABS_CONST_ADDR
2491
- ref1 = ir_LOAD_A(ir_ADD_OFFSET(opline, offsetof(zend_op, op2.zv)));
2492
- #else
2493
- ref = ir_LOAD_U32(ir_ADD_OFFSET(opline, offsetof(zend_op, op2.constant)));
2494
- if (sizeof(void*) == 8) {
2495
- ref = ir_SEXT_A(ref);
2496
- }
2497
- ref1 = ir_ADD_A(ref, opline);
2498
- #endif
2499
-
2500
- end1 = ir_END();
2501
-
2502
- ir_IF_FALSE(if_const);
2503
- ref = ir_LOAD_U32(ir_ADD_OFFSET(opline, offsetof(zend_op, op2.var)));
2504
- if (sizeof(void*) == 8) {
2505
- ref = ir_ZEXT_A(ref);
2443
+ if (GCC_GLOBAL_REGS) {
2444
+ ir_TAILCALL(IR_VOID, ir_CONST_FC_FUNC(zend_jit_undefined_string_key));
2445
+ } else {
2446
+ ir_TAILCALL_1(IR_VOID, ir_CONST_FC_FUNC(zend_jit_undefined_string_key), jit_FP(jit));
2506
2447
}
2507
- ref = ir_ADD_A(jit_FP(jit), ref);
2508
-
2509
- ir_MERGE_WITH(end1);
2510
- ref = ir_PHI_2(IR_ADDR, ref, ref1);
2511
-
2512
- ref = ir_ADD_OFFSET(jit_Z_PTR_ref(jit, ref), offsetof(zend_string, val));
2513
- ir_CALL_3(IR_VOID, ir_CONST_FUNC(zend_error),
2514
- ir_CONST_U8(E_WARNING),
2515
- ir_CONST_ADDR("Undefined array key \"%s\""),
2516
- ref);
2517
- ir_RETURN(IR_VOID);
2518
2448
2519
2449
return 1;
2520
2450
}
@@ -3039,6 +2969,8 @@ static void zend_jit_setup_disasm(void)
3039
2969
REGISTER_HELPER(zend_jit_free_trampoline_helper);
3040
2970
REGISTER_HELPER(zend_jit_verify_return_slow);
3041
2971
REGISTER_HELPER(zend_jit_deprecated_helper);
2972
+ REGISTER_HELPER(zend_jit_undefined_long_key);
2973
+ REGISTER_HELPER(zend_jit_undefined_string_key);
3042
2974
REGISTER_HELPER(zend_jit_copy_extra_args_helper);
3043
2975
REGISTER_HELPER(zend_jit_vm_stack_free_args_helper);
3044
2976
REGISTER_HELPER(zend_free_extra_named_params);
0 commit comments