lightning
[Top][All Lists]
Advanced

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

[PATCH 2/2] powerpc: Optimize jit_bswapr_us()


From: Paul Cercueil
Subject: [PATCH 2/2] powerpc: Optimize jit_bswapr_us()
Date: Sat, 28 May 2022 14:26:45 +0100

The 16-bit byte-swap operation can be done in only two opcodes.

Tested and working on PowerPC-32 and PowerPC-64.

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

diff --git a/lib/jit_ppc-cpu.c b/lib/jit_ppc-cpu.c
index 0517692..cab085f 100644
--- a/lib/jit_ppc-cpu.c
+++ b/lib/jit_ppc-cpu.c
@@ -521,7 +521,8 @@ static jit_word_t 
_movi_p(jit_state_t*,jit_int32_t,jit_word_t);
 #    define extr_i(r0,r1)              EXTSW(r0,r1)
 #    define extr_ui(r0,r1)             CLRLDI(r0,r1,32)
 #  endif
-#  define bswapr_us(r0,r1)             generic_bswapr_us(_jit,r0,r1)
+#  define bswapr_us(r0,r1)             _bswapr_us(_jit,r0,r1)
+static void _bswapr_us(jit_state_t*,jit_int32_t,jit_int32_t);
 #  define bswapr_ui(r0,r1)             _bswapr_ui(_jit,r0,r1)
 static void _bswapr_ui(jit_state_t*,jit_int32_t,jit_int32_t);
 #  if __WORDSIZE == 64
@@ -1146,6 +1147,18 @@ _movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
     return (word);
 }
 
+static void
+_bswapr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
+{
+    if (r0 == r1) {
+        RLWIMI(r0, r0, 16, 8, 15);
+        RLWINM(r0, r0, 24, 16, 31);
+    } else {
+        RLWINM(r0, r1, 8, 16, 23);
+        RLWIMI(r0, r1, 24, 24, 31);
+    }
+}
+
 static void
 _bswapr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
 {
-- 
2.35.1




reply via email to

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