lightning
[Top][All Lists]
Advanced

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

[PATCH 6/9] mips: Use 32-bit MUL opcode for mulr() on 32-bit MIPS


From: Paul Cercueil
Subject: [PATCH 6/9] mips: Use 32-bit MUL opcode for mulr() on 32-bit MIPS
Date: Thu, 19 May 2022 10:39:15 +0100

MIPS32 already has an opcode for 32-bit -> 32-bit multiplication, so
use it instead of doing a 32-bit -> 64-bit multiplication and ignoring
the high bits. It means generating less code (1 vs. 2 opcodes).

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
 lib/jit_mips-cpu.c | 9 +++++++--
 lib/jit_mips-sz.c  | 8 ++++----
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/lib/jit_mips-cpu.c b/lib/jit_mips-cpu.c
index 203b8b0..35fb9f6 100644
--- a/lib/jit_mips-cpu.c
+++ b/lib/jit_mips-cpu.c
@@ -325,6 +325,7 @@ static void _nop(jit_state_t*,jit_int32_t);
 #  define DADDIU(rt,rs,im)             hrri(MIPS_DADDIU,rs,rt,im)
 #  define SUBU(rd,rs,rt)               rrr_t(rs,rt,rd,MIPS_SUBU)
 #  define DSUBU(rd,rs,rt)              rrr_t(rs,rt,rd,MIPS_DSUBU)
+#  define MUL(rd,rs,rt)                        
hrrr_t(MIPS_SPECIAL2,rs,rt,rd,MIPS_MUL)
 #  define MULT(rs,rt)                  rrr_t(rs,rt,_ZERO_REGNO,MIPS_MULT)
 #  define MULTU(rs,rt)                 rrr_t(rs,rt,_ZERO_REGNO,MIPS_MULTU)
 #  define DMULT(rs,rt)                 rrr_t(rs,rt,_ZERO_REGNO,MIPS_DMULT)
@@ -1047,8 +1048,12 @@ _rsbi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, 
jit_word_t i0)
 static void
 _mulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
 {
-    multu(r1, r2);
-    MFLO(r0);
+    if (__WORDSIZE == 32)
+        MUL(r0, r1, r2);
+    else {
+        multu(r1, r2);
+        MFLO(r0);
+    }
 }
 
 static void
diff --git a/lib/jit_mips-sz.c b/lib/jit_mips-sz.c
index 83e52ed..da37848 100644
--- a/lib/jit_mips-sz.c
+++ b/lib/jit_mips-sz.c
@@ -42,8 +42,8 @@
     28,        /* subxr */
     28,        /* subxi */
     16,        /* rsbi */
-    8, /* mulr */
-    16,        /* muli */
+    4, /* mulr */
+    12,        /* muli */
     12,        /* qmulr */
     20,        /* qmuli */
     12,        /* qmulr_u */
@@ -448,8 +448,8 @@
     28,        /* subxr */
     28,        /* subxi */
     16,        /* rsbi */
-    8, /* mulr */
-    16,        /* muli */
+    4, /* mulr */
+    12,        /* muli */
     12,        /* qmulr */
     20,        /* qmuli */
     12,        /* qmulr_u */
-- 
2.35.1




reply via email to

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