@@ -1011,7 +1011,7 @@ static void* dasm_labels[zend_lb_MAX];
1011
1011
|| if (opline) {
1012
1012
| brk #0 // TODO
1013
1013
|| }
1014
- | brk #0 // TODO
1014
+ | EXT_CALL zend_objects_store_del, REG0
1015
1015
|| break;
1016
1016
|| }
1017
1017
|| }
@@ -1833,14 +1833,15 @@ static int zend_jit_assign_tmp_stub(dasm_State **Dst)
1833
1833
uint32_t val_info = MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN;
1834
1834
1835
1835
|->assign_tmp:
1836
- | brk #0 // TODO
1836
+ | sub sp, sp, #16
1837
1837
if (!zend_jit_assign_to_variable(
1838
1838
Dst, NULL,
1839
1839
var_addr, var_addr, -1, -1,
1840
1840
IS_TMP_VAR, val_addr, val_info,
1841
1841
0, 0)) {
1842
1842
return 0;
1843
1843
}
1844
+ | add sp, sp, #16
1844
1845
| ret
1845
1846
return 1;
1846
1847
}
@@ -3673,7 +3674,36 @@ static int zend_jit_assign_to_variable_call(dasm_State **Dst,
3673
3674
zend_jit_addr __res_addr,
3674
3675
bool __check_exception)
3675
3676
{
3676
- | brk #0 // TODO
3677
+ if (Z_MODE(var_addr) != IS_MEM_ZVAL || Z_REG(var_addr) != ZREG_FCARG1x || Z_OFFSET(var_addr) != 0) {
3678
+ | LOAD_ZVAL_ADDR FCARG1x, var_addr
3679
+ }
3680
+ if (Z_MODE(val_addr) != IS_MEM_ZVAL || Z_REG(val_addr) != ZREG_FCARG2x || Z_OFFSET(val_addr) != 0) {
3681
+ | LOAD_ZVAL_ADDR FCARG2x, val_addr
3682
+ }
3683
+ if (opline) {
3684
+ | SET_EX_OPLINE opline, REG0
3685
+ }
3686
+ if (!(val_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
3687
+ | bl ->assign_tmp
3688
+ } else if (val_type == IS_CONST) {
3689
+ | brk #0 // TODO
3690
+ } else if (val_type == IS_TMP_VAR) {
3691
+ | brk #0 // TODO
3692
+ } else if (val_type == IS_VAR) {
3693
+ if (!(val_info & MAY_BE_REF)) {
3694
+ | brk #0 // TODO
3695
+ } else {
3696
+ | brk #0 // TODO
3697
+ }
3698
+ } else if (val_type == IS_CV) {
3699
+ if (!(val_info & MAY_BE_REF)) {
3700
+ | brk #0 // TODO
3701
+ } else {
3702
+ | brk #0 // TODO
3703
+ }
3704
+ } else {
3705
+ ZEND_UNREACHABLE();
3706
+ }
3677
3707
3678
3708
return 1;
3679
3709
}
@@ -7151,7 +7181,27 @@ static int zend_jit_assign_obj(dasm_State **Dst,
7151
7181
}
7152
7182
} else {
7153
7183
prop_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1x, prop_info->offset);
7154
- | brk #0 // TODO
7184
+ if (!ce || ce_is_instanceof || !(ce->ce_flags & ZEND_ACC_IMMUTABLE) || ce->__get || ce->__set) {
7185
+ // Undefined property with magic __get()/__set()
7186
+ if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) {
7187
+ int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM);
7188
+ const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point);
7189
+
7190
+ if (!exit_addr) {
7191
+ return 0;
7192
+ }
7193
+ | brk #0 // TODO
7194
+ } else {
7195
+ | brk #0 // TODO
7196
+ needs_slow_path = 1;
7197
+ }
7198
+ }
7199
+ if (ZEND_TYPE_IS_SET(prop_info->type)) {
7200
+ uint32_t info = val_info;
7201
+
7202
+ | // value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
7203
+ | brk #0 // TODO
7204
+ }
7155
7205
}
7156
7206
7157
7207
if (!prop_info || !ZEND_TYPE_IS_SET(prop_info->type)) {
0 commit comments