Skip to content

Commit fc2d477

Browse files
committed
Avoid partial register stall
1 parent bf321f0 commit fc2d477

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,8 +602,10 @@ static void* dasm_labels[zend_lb_MAX];
602602
| mov r0, lval
603603
|.endif
604604
|| if (JIT_G(opt_flags) & allowed_opt_flags & ZEND_JIT_CPU_AVX) {
605+
| vxorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0)
605606
| vcvtsi2sd, xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), r0
606607
|| } else {
608+
| xorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0)
607609
| cvtsi2sd, xmm(reg-ZREG_XMM0), r0
608610
|| }
609611
|| }
@@ -614,14 +616,18 @@ static void* dasm_labels[zend_lb_MAX];
614616
| SSE_GET_LONG reg, Z_LVAL_P(Z_ZV(addr))
615617
|| } else if (Z_MODE(addr) == IS_MEM_ZVAL) {
616618
|| if (JIT_G(opt_flags) & allowed_opt_flags & ZEND_JIT_CPU_AVX) {
619+
| vxorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0)
617620
| vcvtsi2sd xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), aword [Ra(Z_REG(addr))+Z_OFFSET(addr)]
618621
|| } else {
622+
| xorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0)
619623
| cvtsi2sd xmm(reg-ZREG_XMM0), aword [Ra(Z_REG(addr))+Z_OFFSET(addr)]
620624
|| }
621625
|| } else if (Z_MODE(addr) == IS_REG) {
622626
|| if (JIT_G(opt_flags) & allowed_opt_flags & ZEND_JIT_CPU_AVX) {
627+
| vxorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0)
623628
| vcvtsi2sd xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0), Ra(Z_REG(addr))
624629
|| } else {
630+
| xorps xmm(reg-ZREG_XMM0), xmm(reg-ZREG_XMM0)
625631
| cvtsi2sd xmm(reg-ZREG_XMM0), Ra(Z_REG(addr))
626632
|| }
627633
|| } else {

0 commit comments

Comments
 (0)