@@ -8076,51 +8076,47 @@ static int zend_jit_bool_jmpznz(dasm_State **Dst, const zend_op *opline, uint32_
8076
8076
if (set_bool) {
8077
8077
if (exit_addr) {
8078
8078
if (branch_opcode == ZEND_JMPNZ || branch_opcode == ZEND_JMPNZ_EX) {
8079
- | bvs >1
8080
8079
| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE, TMP1w, TMP2
8080
+ | bvs &exit_addr
8081
8081
| bne &exit_addr
8082
- |1:
8083
8082
| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE, TMP1w, TMP2
8084
8083
} else {
8085
- | SET_ZVAL_TYPE_INFO res_addr, IS_FALSE, TMP1w, TMP2
8086
8084
| bvs >1
8085
+ | SET_ZVAL_TYPE_INFO res_addr, IS_FALSE, TMP1w, TMP2
8087
8086
| beq &exit_addr
8088
8087
|1:
8089
8088
| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE, TMP1w, TMP2
8090
8089
}
8091
8090
} else if (false_label != (uint32_t)-1) { // JMPZ_EX
8092
- | SET_ZVAL_TYPE_INFO res_addr, IS_FALSE, TMP1w, TMP2
8093
8091
| bvs >1
8092
+ | SET_ZVAL_TYPE_INFO res_addr, IS_FALSE, TMP1w, TMP2
8094
8093
| beq => false_label
8095
- | SET_ZVAL_TYPE_INFO res_addr, IS_TRUE, TMP1w, TMP2
8096
8094
|1:
8095
+ | SET_ZVAL_TYPE_INFO res_addr, IS_TRUE, TMP1w, TMP2
8097
8096
} else if (true_label != (uint32_t)-1) { // JMPNZ_EX
8098
- | bvs >1
8099
8097
| SET_ZVAL_TYPE_INFO res_addr, IS_TRUE, TMP1w, TMP2
8098
+ | bvs => true_label
8100
8099
| bne => true_label
8101
- |1:
8102
8100
| SET_ZVAL_TYPE_INFO res_addr, IS_FALSE, TMP1w, TMP2
8103
8101
} else if (set_bool_not) { // BOOL_NOT
8102
+ | mov REG0w, #IS_FALSE
8104
8103
| bvs >1
8104
+ | bne >1
8105
8105
| mov REG0w, #IS_TRUE
8106
- | beq >2
8107
8106
|1:
8108
- | mov REG0w, #IS_FALSE
8109
- |2:
8110
8107
| SET_ZVAL_TYPE_INFO_FROM_REG res_addr, REG0w, TMP1
8111
8108
} else { // BOOL
8112
- | bvs >1
8113
8109
| mov REG0w, #IS_TRUE
8114
- | bne >2
8115
- |1:
8110
+ | bvs >1
8111
+ | bne >1
8116
8112
| mov REG0w, #IS_FALSE
8117
- |2 :
8113
+ |1 :
8118
8114
| SET_ZVAL_TYPE_INFO_FROM_REG res_addr, REG0w, TMP1
8119
8115
}
8120
8116
} else {
8121
8117
if (exit_addr) {
8122
8118
if (branch_opcode == ZEND_JMPNZ || branch_opcode == ZEND_JMPNZ_EX) {
8123
- | bvs >1
8119
+ | bvs &exit_addr
8124
8120
| bne &exit_addr
8125
8121
|1:
8126
8122
} else {
@@ -8130,20 +8126,17 @@ static int zend_jit_bool_jmpznz(dasm_State **Dst, const zend_op *opline, uint32_
8130
8126
}
8131
8127
} else {
8132
8128
ZEND_ASSERT(true_label != (uint32_t)-1 || false_label != (uint32_t)-1);
8133
- if (false_label != (uint32_t)-1) {
8134
- | bvs =>false_label
8135
- } else {
8136
- | bvs >1
8137
- }
8138
- if (true_label != (uint32_t)-1) {
8139
- | bne =>true_label
8140
- if (false_label != (uint32_t)-1) {
8141
- | b =>false_label
8129
+ if (false_label != (uint32_t)-1 ) {
8130
+ | bvs >1
8131
+ | beq => false_label
8132
+ |1:
8133
+ if (true_label != (uint32_t)-1) {
8134
+ | b =>true_label
8142
8135
}
8143
8136
} else {
8144
- | beq =>false_label
8137
+ | bvs => true_label
8138
+ | bne => true_label
8145
8139
}
8146
- |1:
8147
8140
}
8148
8141
}
8149
8142
} else if (op1_info & (MAY_BE_ANY - (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG))) {
0 commit comments