Skip to content

Commit bf321f0

Browse files
committed
Use zero-extended mov insted of sign-signed movsxd
1 parent d3812ca commit bf321f0

File tree

1 file changed

+20
-55
lines changed

1 file changed

+20
-55
lines changed

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 20 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -539,11 +539,7 @@ static void* dasm_labels[zend_lb_MAX];
539539

540540
|.macro UNDEF_OPLINE_RESULT
541541
| mov r0, EX->opline
542-
|.if X64
543-
| movsxd r0, dword OP:r0->result.var
544-
|.else
545-
| mov r0, OP:r0->result.var
546-
|.endif
542+
| mov eax, dword OP:r0->result.var
547543
| SET_Z_TYPE_INFO FP + r0, IS_UNDEF
548544
|.endmacro
549545

@@ -1808,11 +1804,7 @@ static int zend_jit_exception_handler_undef_stub(dasm_State **Dst)
18081804
| MEM_OP2_2_ZTS mov, r0, aword, executor_globals, opline_before_exception, r0
18091805
| test byte OP:r0->result_type, (IS_TMP_VAR|IS_VAR)
18101806
| jnz >1
1811-
| .if X64
1812-
| movsxd r0, dword OP:r0->result.var
1813-
| .else
1814-
| mov r0, aword OP:r0->result.var
1815-
| .endif
1807+
| mov eax, dword OP:r0->result.var
18161808
| SET_Z_TYPE_INFO FP + r0, IS_UNDEF
18171809
|1:
18181810
| jmp ->exception_handler
@@ -1911,11 +1903,7 @@ static int zend_jit_throw_cannot_pass_by_ref_stub(dasm_State **Dst)
19111903
{
19121904
|->throw_cannot_pass_by_ref:
19131905
| mov r0, EX->opline
1914-
|.if X64
1915-
| movsxd r1, dword OP:r0->result.var
1916-
|.else
1917-
| mov r1, OP:r0->result.var
1918-
|.endif
1906+
| mov ecx, dword OP:r0->result.var
19191907
| SET_Z_TYPE_INFO RX+r1, IS_UNDEF
19201908
| // last EX(call) frame may be delayed
19211909
| cmp RX, EX->call
@@ -1929,11 +1917,7 @@ static int zend_jit_throw_cannot_pass_by_ref_stub(dasm_State **Dst)
19291917
| EXT_CALL zend_cannot_pass_by_reference, r0
19301918
| cmp byte OP:RX->op1_type, IS_TMP_VAR
19311919
| jne >9
1932-
|.if X64
1933-
| movsxd r0, dword OP:RX->op1.var
1934-
|.else
1935-
| mov r0, OP:RX->op1.var
1936-
|.endif
1920+
| mov eax, dword OP:RX->op1.var
19371921
| add r0, FP
19381922
| ZVAL_PTR_DTOR ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0), MAY_BE_ANY|MAY_BE_RC1|MAY_BE_RCN|MAY_BE_REF, 0, 0, NULL
19391923
|9:
@@ -1962,11 +1946,7 @@ static int zend_jit_undefined_offset_stub(dasm_State **Dst)
19621946
| sub r4, 12
19631947
|.endif
19641948
| mov r0, EX->opline
1965-
|.if X64
1966-
| movsxd r1, dword OP:r0->result.var
1967-
|.else
1968-
| mov r1, OP:r0->result.var
1969-
|.endif
1949+
| mov ecx, dword OP:r0->result.var
19701950
| cmp byte OP:r0->op2_type, IS_CONST
19711951
| SET_Z_TYPE_INFO FP + r1, IS_NULL
19721952
| jne >2
@@ -1978,11 +1958,7 @@ static int zend_jit_undefined_offset_stub(dasm_State **Dst)
19781958
|.endif
19791959
| jmp >3
19801960
|2:
1981-
|.if X64
1982-
| movsxd r0, dword OP:r0->op2.var
1983-
|.else
1984-
| mov r0, OP:r0->op2.var
1985-
|.endif
1961+
| mov eax, dword OP:r0->op2.var
19861962
| add r0, FP
19871963
|3:
19881964
|.if X64WIN
@@ -2030,11 +2006,7 @@ static int zend_jit_undefined_index_stub(dasm_State **Dst)
20302006
| sub r4, 12
20312007
|.endif
20322008
| mov r0, EX->opline
2033-
|.if X64
2034-
| movsxd r1, dword OP:r0->result.var
2035-
|.else
2036-
| mov r1, OP:r0->result.var
2037-
|.endif
2009+
| mov ecx, dword OP:r0->result.var
20382010
| cmp byte OP:r0->op2_type, IS_CONST
20392011
| SET_Z_TYPE_INFO FP + r1, IS_NULL
20402012
| jne >2
@@ -2046,11 +2018,7 @@ static int zend_jit_undefined_index_stub(dasm_State **Dst)
20462018
|.endif
20472019
| jmp >3
20482020
|2:
2049-
|.if X64
2050-
| movsxd r0, dword OP:r0->op2.var
2051-
|.else
2052-
| mov r0, OP:r0->op2.var
2053-
|.endif
2021+
| mov eax, dword OP:r0->op2.var
20542022
| add r0, FP
20552023
|3:
20562024
|.if X64WIN
@@ -2104,11 +2072,7 @@ static int zend_jit_cannot_add_element_stub(dasm_State **Dst)
21042072
| mov r0, EX->opline
21052073
| cmp byte OP:r0->result_type, IS_UNUSED
21062074
| jz >1
2107-
|.if X64
2108-
| movsxd r0, dword OP:r0->result.var
2109-
|.else
2110-
| mov r0, OP:r0->result.var
2111-
|.endif
2075+
| mov eax, dword OP:r0->result.var
21122076
| SET_Z_TYPE_INFO FP + r0, IS_NULL
21132077
|1:
21142078
|.if X64WIN
@@ -5257,7 +5221,7 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o
52575221
}
52585222
| // if (EXPECTED((zend_ulong)(_h) < (zend_ulong)(_ht)->nNumUsed))
52595223
|.if X64
5260-
| movsxd r0, dword [FCARG1a + offsetof(zend_array, nNumUsed)]
5224+
| mov eax, dword [FCARG1a + offsetof(zend_array, nNumUsed)]
52615225
if (val == 0) {
52625226
| test r0, r0
52635227
} else if (val > 0 && !op2_loaded) {
@@ -8664,7 +8628,7 @@ static int zend_jit_push_call_frame(dasm_State **Dst, const zend_op *opline, zen
86648628
|.if X64
86658629
| movsxd r2, edx
86668630
|.endif
8667-
| sub FCARG1a, r2
8631+
| sub FCARG1a, r2
86688632
|1:
86698633
}
86708634

@@ -9921,8 +9885,9 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
99219885
}
99229886
| // opline += num_args;
99239887
|.if X64
9924-
| movsxd r2, ecx
9925-
| imul r2, r2, sizeof(zend_op)
9888+
|| ZEND_ASSERT(sizeof(zend_op) == 32);
9889+
| mov edx, ecx
9890+
| shl r2, 5
99269891
|.else
99279892
| imul r2, ecx, sizeof(zend_op)
99289893
|.endif
@@ -9938,9 +9903,9 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
99389903
| sub edx, ecx
99399904
| jle >3 //???
99409905
| // zval *var = EX_VAR_NUM(num_args);
9941-
|.if X64
9942-
| movsxd r1, ecx
9943-
|.endif
9906+
// |.if X64
9907+
// | movsxd r1, ecx
9908+
// |.endif
99449909
| shl r1, 4
99459910
| lea r1, [FP + r1 + (ZEND_CALL_FRAME_SLOT * sizeof(zval))]
99469911
|2:
@@ -12205,11 +12170,10 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_
1220512170
| mov r0, aword [r0 + opline->extended_value]
1220612171
| sub r0, 1
1220712172
| // if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket)))
12173+
| MEM_OP2_2_ZTS mov, ecx, dword, executor_globals, symbol_table.nNumUsed, r1
1220812174
|.if X64
12209-
| MEM_OP2_2_ZTS movsxd, r1, dword, executor_globals, symbol_table.nNumUsed, r1
1221012175
| shl r1, 5
1221112176
|.else
12212-
| MEM_OP2_2_ZTS mov, r1, dword, executor_globals, symbol_table.nNumUsed, r1
1221312177
| imul r1, sizeof(Bucket)
1221412178
|.endif
1221512179
| cmp r0, r1
@@ -14659,7 +14623,8 @@ static int zend_jit_fe_fetch(dasm_State **Dst, const zend_op *opline, uint32_t o
1465914623
| mov FCARG1d, dword [FP + opline->op1.var + offsetof(zval, u2.fe_pos)]
1466014624
| // p = fe_ht->arData + pos;
1466114625
|.if X64
14662-
| movsxd r0, FCARG1d
14626+
|| ZEND_ASSERT(sizeof(Bucket) == 32);
14627+
| mov eax, FCARG1d
1466314628
| shl r0, 5
1466414629
|.else
1466514630
| imul r0, FCARG1a, sizeof(Bucket)

0 commit comments

Comments
 (0)