@@ -4209,9 +4209,12 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4209
4209
// case ZEND_DIV: // TODO: check for division by zero ???
4210
4210
op1_info = OP1_INFO ();
4211
4211
op1_addr = OP1_REG_ADDR ();
4212
- if (opline -> op1_type != IS_CONST
4213
- && orig_op1_type != IS_UNKNOWN
4214
- && (orig_op1_type & IS_TRACE_REFERENCE )) {
4212
+ op2_info = OP2_INFO ();
4213
+ op2_addr = OP2_REG_ADDR ();
4214
+ if (orig_op1_type != IS_UNKNOWN
4215
+ && (orig_op1_type & IS_TRACE_REFERENCE )
4216
+ && (Z_MODE (op2_addr ) != IS_REG || Z_REG (op2_addr ) != ZREG_FCARG1 )
4217
+ && (orig_op2_type == IS_UNKNOWN || !(orig_op2_type & IS_TRACE_REFERENCE ))) {
4215
4218
if (!zend_jit_fetch_reference (& dasm_state , opline , orig_op1_type , & op1_info , & op1_addr ,
4216
4219
!ssa -> var_info [ssa_op -> op1_use ].guarded_reference , 1 )) {
4217
4220
goto jit_failure ;
@@ -4223,11 +4226,10 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4223
4226
} else {
4224
4227
CHECK_OP1_TRACE_TYPE ();
4225
4228
}
4226
- op2_info = OP2_INFO ();
4227
- op2_addr = OP2_REG_ADDR ();
4228
- if (opline -> op2_type != IS_CONST
4229
- && orig_op2_type != IS_UNKNOWN
4230
- && (orig_op2_type & IS_TRACE_REFERENCE )) {
4229
+ if (orig_op2_type != IS_UNKNOWN
4230
+ && (orig_op2_type & IS_TRACE_REFERENCE )
4231
+ && (Z_MODE (op1_addr ) != IS_REG || Z_REG (op1_addr ) != ZREG_FCARG1 )
4232
+ && (orig_op1_type == IS_UNKNOWN || !(orig_op1_type & IS_TRACE_REFERENCE ))) {
4231
4233
if (!zend_jit_fetch_reference (& dasm_state , opline , orig_op2_type , & op2_info , & op2_addr ,
4232
4234
!ssa -> var_info [ssa_op -> op2_use ].guarded_reference , 1 )) {
4233
4235
goto jit_failure ;
0 commit comments