lightning
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/2] mips: Optimize calli


From: Paul Cercueil
Subject: [PATCH 2/2] mips: Optimize calli
Date: Sat, 27 Aug 2022 16:49:50 +0100

Instead of doing:

LUI t9, 0x1afe
ORI t9, t9, 0xbce0
JALR t9
NOP

When possible, it will now emit:

LUI t9, 0x1afe
JAL 0x1afebce0
ORI t9, t9, 0xbce0

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
 lib/jit_mips-cpu.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/lib/jit_mips-cpu.c b/lib/jit_mips-cpu.c
index 0625589..4bd3dd1 100644
--- a/lib/jit_mips-cpu.c
+++ b/lib/jit_mips-cpu.c
@@ -2931,6 +2931,32 @@ _callr(jit_state_t *_jit, jit_int32_t r0)
 static void
 _calli(jit_state_t *_jit, jit_word_t i0)
 {
+    if (((_jit->pc.w + sizeof(jit_int32_t)) & 0xf0000000) == (i0 & 
0xf0000000)) {
+        if (can_sign_extend_short_p(i0)) {
+            JAL((i0 & ~0xf0000000) >> 2);
+            addiu(_T9_REGNO, _ZERO_REGNO, i0);
+            return;
+        }
+
+        if (can_zero_extend_short_p(i0)) {
+            JAL((i0 & ~0xf0000000) >> 2);
+            ORI(_T9_REGNO, _ZERO_REGNO, i0);
+            return;
+        }
+
+        if (can_sign_extend_int_p(i0)) {
+            if (i0 & 0xffff) {
+                LUI(_T9_REGNO, i0 >> 16);
+                JAL((i0 & ~0xf0000000) >> 2);
+                ORI(_T9_REGNO, _T9_REGNO, i0);
+            } else {
+                JAL((i0 & ~0xf0000000) >> 2);
+                LUI(_T9_REGNO, i0 >> 16);
+            }
+            return;
+        }
+    }
+
     movi(_T9_REGNO, i0);
     JALR(_T9_REGNO);
     NOP(1);
-- 
2.35.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]