]> granicus.if.org Git - php/commitdiff
Use RIP-relative addressing
authorDmitry Stogov <dmitry@zend.com>
Thu, 9 Jul 2020 09:40:56 +0000 (12:40 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 9 Jul 2020 09:40:56 +0000 (12:40 +0300)
ext/opcache/jit/zend_jit_x86.dasc

index 25678e206a14eebac467b61725a4892c627237ab..7ba23e3d105f885b60d91c3a8c7f1f051602b9c0 100644 (file)
@@ -11440,7 +11440,12 @@ static int zend_jit_switch(dasm_State **Dst, const zend_op *opline, const zend_o
                                        |       cmp FCARG2a, jumptable->nNumUsed
                                        |       jae >3
                                        |.if X64
-                                       |       jmp aword [FCARG2a * 8 + >4]
+                                               if (!IS_32BIT(dasm_end)) {
+                                                       |       lea r0, aword [>4]
+                                                       |       jmp aword [r0 + FCARG2a * 8]
+                                               } else {
+                                                       |       jmp aword [FCARG2a * 8 + >4]
+                                               }
                                        |.else
                                        |       jmp aword [FCARG2a * 4 + >4]
                                        |.endif
@@ -11474,7 +11479,16 @@ static int zend_jit_switch(dasm_State **Dst, const zend_op *opline, const zend_o
                                        |       cdq
                                        |.endif
                                        |       idiv FCARG1a
+                                       |.if X64
+                                       if (!IS_32BIT(dasm_end)) {
+                                               |       lea FCARG1a, aword [>4]
+                                               |       jmp aword [FCARG1a + r0]
+                                       } else {
+                                               |       jmp aword [r0 + >4]
+                                       }
+                                       |.else
                                        |       jmp aword [r0 + >4]
+                                       |.endif
                                        |3:
                                        |.cold_code
                                        |.align aword
@@ -11520,7 +11534,16 @@ static int zend_jit_switch(dasm_State **Dst, const zend_op *opline, const zend_o
                                |       cdq
                                |.endif
                                |       idiv FCARG1a
+                               |.if X64
+                               if (!IS_32BIT(dasm_end)) {
+                                       |       lea FCARG1a, aword [>4]
+                                       |       jmp aword [FCARG1a + r0]
+                               } else {
+                                       |       jmp aword [r0 + >4]
+                               }
+                               |.else
                                |       jmp aword [r0 + >4]
+                               |.endif
                                |3:
                                |.cold_code
                                |.align aword