Skip to content

Commit 0d157cf

Browse files
committed
Micro-optimization
1 parent c3299d7 commit 0d157cf

File tree

2 files changed

+22
-26
lines changed

2 files changed

+22
-26
lines changed

Zend/zend_vm_def.h

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6637,6 +6637,7 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
66376637
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
66386638
ZEND_VM_CONTINUE();
66396639
}
6640+
pos++;
66406641
value = &p->val;
66416642
value_type = Z_TYPE_INFO_P(value);
66426643
if (EXPECTED(value_type != IS_UNDEF)) {
@@ -6650,10 +6651,9 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
66506651
break;
66516652
}
66526653
}
6653-
pos++;
66546654
p++;
66556655
}
6656-
Z_FE_POS_P(array) = pos + 1;
6656+
Z_FE_POS_P(array) = pos;
66576657
if (RETURN_VALUE_USED(opline)) {
66586658
if (!p->key) {
66596659
ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -6676,7 +6676,7 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
66766676
/* reached end of iteration */
66776677
ZEND_VM_C_GOTO(fe_fetch_r_exit);
66786678
}
6679-
6679+
pos++;
66806680
value = &p->val;
66816681
value_type = Z_TYPE_INFO_P(value);
66826682
if (EXPECTED(value_type != IS_UNDEF)) {
@@ -6693,9 +6693,9 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
66936693
break;
66946694
}
66956695
}
6696-
pos++;
66976696
p++;
66986697
}
6698+
EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
66996699
if (RETURN_VALUE_USED(opline)) {
67006700
if (UNEXPECTED(!p->key)) {
67016701
ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -6709,7 +6709,6 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
67096709
ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
67106710
}
67116711
}
6712-
EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos + 1;
67136712
} else {
67146713
if (EXPECTED(++iter->index > 0)) {
67156714
/* This could cause an endless loop if index becomes zero again.
@@ -6790,6 +6789,7 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
67906789
/* reached end of iteration */
67916790
ZEND_VM_C_GOTO(fe_fetch_w_exit);
67926791
}
6792+
pos++;
67936793
value = &p->val;
67946794
value_type = Z_TYPE_INFO_P(value);
67956795
if (EXPECTED(value_type != IS_UNDEF)) {
@@ -6803,17 +6803,16 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
68036803
break;
68046804
}
68056805
}
6806-
pos++;
68076806
p++;
68086807
}
6808+
EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
68096809
if (RETURN_VALUE_USED(opline)) {
68106810
if (!p->key) {
68116811
ZVAL_LONG(EX_VAR(opline->result.var), p->h);
68126812
} else {
68136813
ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
68146814
}
68156815
}
6816-
EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
68176816
} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
68186817
zend_object_iterator *iter;
68196818

@@ -6828,7 +6827,7 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
68286827
/* reached end of iteration */
68296828
ZEND_VM_C_GOTO(fe_fetch_w_exit);
68306829
}
6831-
6830+
pos++;
68326831
value = &p->val;
68336832
value_type = Z_TYPE_INFO_P(value);
68346833
if (EXPECTED(value_type != IS_UNDEF)) {
@@ -6854,9 +6853,9 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
68546853
break;
68556854
}
68566855
}
6857-
pos++;
68586856
p++;
68596857
}
6858+
EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
68606859
if (RETURN_VALUE_USED(opline)) {
68616860
if (UNEXPECTED(!p->key)) {
68626861
ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -6870,7 +6869,6 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
68706869
ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
68716870
}
68726871
}
6873-
EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
68746872
} else {
68756873
if (++iter->index > 0) {
68766874
/* This could cause an endless loop if index becomes zero again.
@@ -9605,6 +9603,7 @@ ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_FE_FETCH_R, op->op2_type == IS_CV && (op1_inf
96059603
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
96069604
ZEND_VM_CONTINUE();
96079605
}
9606+
pos++;
96089607
value = &p->val;
96099608
value_type = Z_TYPE_INFO_P(value);
96109609
if (EXPECTED(value_type != IS_UNDEF)) {
@@ -9618,10 +9617,9 @@ ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_FE_FETCH_R, op->op2_type == IS_CV && (op1_inf
96189617
break;
96199618
}
96209619
}
9621-
pos++;
96229620
p++;
96239621
}
9624-
Z_FE_POS_P(array) = pos + 1;
9622+
Z_FE_POS_P(array) = pos;
96259623
if (RETURN_VALUE_USED(opline)) {
96269624
if (!p->key) {
96279625
ZVAL_LONG(EX_VAR(opline->result.var), p->h);

Zend/zend_vm_execute.h

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22186,6 +22186,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
2218622186
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
2218722187
ZEND_VM_CONTINUE();
2218822188
}
22189+
pos++;
2218922190
value = &p->val;
2219022191
value_type = Z_TYPE_INFO_P(value);
2219122192
if (EXPECTED(value_type != IS_UNDEF)) {
@@ -22199,10 +22200,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
2219922200
break;
2220022201
}
2220122202
}
22202-
pos++;
2220322203
p++;
2220422204
}
22205-
Z_FE_POS_P(array) = pos + 1;
22205+
Z_FE_POS_P(array) = pos;
2220622206
if (RETURN_VALUE_USED(opline)) {
2220722207
if (!p->key) {
2220822208
ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -22225,7 +22225,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
2222522225
/* reached end of iteration */
2222622226
goto fe_fetch_r_exit;
2222722227
}
22228-
22228+
pos++;
2222922229
value = &p->val;
2223022230
value_type = Z_TYPE_INFO_P(value);
2223122231
if (EXPECTED(value_type != IS_UNDEF)) {
@@ -22242,9 +22242,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
2224222242
break;
2224322243
}
2224422244
}
22245-
pos++;
2224622245
p++;
2224722246
}
22247+
EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
2224822248
if (RETURN_VALUE_USED(opline)) {
2224922249
if (UNEXPECTED(!p->key)) {
2225022250
ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -22258,7 +22258,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
2225822258
ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
2225922259
}
2226022260
}
22261-
EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos + 1;
2226222261
} else {
2226322262
if (EXPECTED(++iter->index > 0)) {
2226422263
/* This could cause an endless loop if index becomes zero again.
@@ -22339,6 +22338,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
2233922338
/* reached end of iteration */
2234022339
goto fe_fetch_w_exit;
2234122340
}
22341+
pos++;
2234222342
value = &p->val;
2234322343
value_type = Z_TYPE_INFO_P(value);
2234422344
if (EXPECTED(value_type != IS_UNDEF)) {
@@ -22352,17 +22352,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
2235222352
break;
2235322353
}
2235422354
}
22355-
pos++;
2235622355
p++;
2235722356
}
22357+
EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
2235822358
if (RETURN_VALUE_USED(opline)) {
2235922359
if (!p->key) {
2236022360
ZVAL_LONG(EX_VAR(opline->result.var), p->h);
2236122361
} else {
2236222362
ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
2236322363
}
2236422364
}
22365-
EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
2236622365
} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
2236722366
zend_object_iterator *iter;
2236822367

@@ -22377,7 +22376,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
2237722376
/* reached end of iteration */
2237822377
goto fe_fetch_w_exit;
2237922378
}
22380-
22379+
pos++;
2238122380
value = &p->val;
2238222381
value_type = Z_TYPE_INFO_P(value);
2238322382
if (EXPECTED(value_type != IS_UNDEF)) {
@@ -22403,9 +22402,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
2240322402
break;
2240422403
}
2240522404
}
22406-
pos++;
2240722405
p++;
2240822406
}
22407+
EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
2240922408
if (RETURN_VALUE_USED(opline)) {
2241022409
if (UNEXPECTED(!p->key)) {
2241122410
ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -22419,7 +22418,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
2241922418
ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
2242022419
}
2242122420
}
22422-
EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
2242322421
} else {
2242422422
if (++iter->index > 0) {
2242522423
/* This could cause an endless loop if index becomes zero again.
@@ -31382,6 +31380,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_
3138231380
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
3138331381
ZEND_VM_CONTINUE();
3138431382
}
31383+
pos++;
3138531384
value = &p->val;
3138631385
value_type = Z_TYPE_INFO_P(value);
3138731386
if (EXPECTED(value_type != IS_UNDEF)) {
@@ -31395,10 +31394,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_
3139531394
break;
3139631395
}
3139731396
}
31398-
pos++;
3139931397
p++;
3140031398
}
31401-
Z_FE_POS_P(array) = pos + 1;
31399+
Z_FE_POS_P(array) = pos;
3140231400
if (0) {
3140331401
if (!p->key) {
3140431402
ZVAL_LONG(EX_VAR(opline->result.var), p->h);
@@ -31434,6 +31432,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_
3143431432
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
3143531433
ZEND_VM_CONTINUE();
3143631434
}
31435+
pos++;
3143731436
value = &p->val;
3143831437
value_type = Z_TYPE_INFO_P(value);
3143931438
if (EXPECTED(value_type != IS_UNDEF)) {
@@ -31447,10 +31446,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_
3144731446
break;
3144831447
}
3144931448
}
31450-
pos++;
3145131449
p++;
3145231450
}
31453-
Z_FE_POS_P(array) = pos + 1;
31451+
Z_FE_POS_P(array) = pos;
3145431452
if (1) {
3145531453
if (!p->key) {
3145631454
ZVAL_LONG(EX_VAR(opline->result.var), p->h);

0 commit comments

Comments
 (0)