lightning
[Top][All Lists]
Advanced

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

[PATCH 3/4] Allow *_ui macros on 32-bit CPUs


From: Paul Cercueil
Subject: [PATCH 3/4] Allow *_ui macros on 32-bit CPUs
Date: Wed, 28 Apr 2021 18:18:11 +0100

If you want for instance to retrieve a unsigned 32-bit value returned by
a function that was just called, you previously needed to write the
following:

 #if __WORDSIZE == 64
 jit_retval_ui(JIT_R0);
 #else
 jit_retval(JIT_R0);
 #endif

Make it simpler by adding the *_ui macros on 32-bit CPUs, where they
simply point to their corresponding *_i variant.

For jit_extr_ui and jit_extr_i macros, on 32-bit CPUs they now simply
resolve to jit_movr().

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
 include/lightning.h.in | 12 ++++++++----
 lib/jit_arm.c          |  2 ++
 lib/jit_hppa.c         |  2 ++
 lib/jit_mips.c         |  2 --
 lib/jit_ppc.c          |  2 --
 lib/jit_s390-cpu.c     |  5 ++---
 lib/jit_s390.c         |  2 --
 lib/jit_sparc.c        |  2 --
 lib/jit_x86-cpu.c      |  5 ++++-
 lib/jit_x86.c          |  2 --
 lib/lightning.c        |  5 +++++
 11 files changed, 23 insertions(+), 18 deletions(-)

diff --git a/include/lightning.h.in b/include/lightning.h.in
index dd6402b..770aea0 100644
--- a/include/lightning.h.in
+++ b/include/lightning.h.in
@@ -213,6 +213,7 @@ typedef enum {
 #define jit_getarg_i(u,v)      _jit_getarg_i(_jit,u,v)
 #if __WORDSIZE == 32
 #  define jit_getarg(u,v)      jit_getarg_i(u,v)
+#  define jit_getarg_ui(u,v)   jit_getarg_i(u,v)
 #else
 #  define jit_getarg(u,v)      jit_getarg_l(u,v)
 #  define jit_getarg_ui(u,v)   _jit_getarg_ui(_jit,u,v)
@@ -345,10 +346,8 @@ typedef enum {
 #define jit_extr_s(u,v)                jit_new_node_ww(jit_code_extr_s,u,v)
 #define jit_extr_us(u,v)       jit_new_node_ww(jit_code_extr_us,u,v)
     jit_code_extr_s,           jit_code_extr_us,
-#if __WORDSIZE == 64
 #  define jit_extr_i(u,v)      jit_new_node_ww(jit_code_extr_i,u,v)
 #  define jit_extr_ui(u,v)     jit_new_node_ww(jit_code_extr_ui,u,v)
-#endif
     jit_code_extr_i,           jit_code_extr_ui,
 
 #define jit_htonr_us(u,v)      jit_new_node_ww(jit_code_htonr_us,u,v)
@@ -360,8 +359,8 @@ typedef enum {
 #  define jit_htonr(u,v)       jit_new_node_ww(jit_code_htonr_ui,u,v)
 #  define jit_ntohr(u,v)       jit_new_node_ww(jit_code_htonr_ui,u,v)
 #else
-#define jit_htonr_ul(u,v)      jit_new_node_ww(jit_code_htonr_ul,u,v)
-#define jit_ntohr_ul(u,v)      jit_new_node_ww(jit_code_htonr_ul,u,v)
+#  define jit_htonr_ul(u,v)    jit_new_node_ww(jit_code_htonr_ul,u,v)
+#  define jit_ntohr_ul(u,v)    jit_new_node_ww(jit_code_htonr_ul,u,v)
 #  define jit_htonr(u,v)       jit_new_node_ww(jit_code_htonr_ul,u,v)
 #  define jit_ntohr(u,v)       jit_new_node_ww(jit_code_htonr_ul,u,v)
 #endif
@@ -384,7 +383,9 @@ typedef enum {
     jit_code_ldr_i,            jit_code_ldi_i,
 #if __WORDSIZE == 32
 #  define jit_ldr(u,v)         jit_ldr_i(u,v)
+#  define jit_ldr_ui(u,v)      jit_ldr_i(u,v)
 #  define jit_ldi(u,v)         jit_ldi_i(u,v)
+#  define jit_ldi_ui(u,v)      jit_ldi_i(u,v)
 #else
 #  define jit_ldr(u,v)         jit_ldr_l(u,v)
 #  define jit_ldi(u,v)         jit_ldi_l(u,v)
@@ -413,7 +414,9 @@ typedef enum {
     jit_code_ldxr_i,           jit_code_ldxi_i,
 #if __WORDSIZE == 32
 #  define jit_ldxr(u,v,w)      jit_ldxr_i(u,v,w)
+#  define jit_ldxr_ui(u,v,w)   jit_ldxr_i(u,v,w)
 #  define jit_ldxi(u,v,w)      jit_ldxi_i(u,v,w)
+#  define jit_ldxi_ui(u,v,w)   jit_ldxi_i(u,v,w)
 #else
 #  define jit_ldxr_ui(u,v,w)   jit_new_node_www(jit_code_ldxr_ui,u,v,w)
 #  define jit_ldxi_ui(u,v,w)   jit_new_node_www(jit_code_ldxi_ui,u,v,w)
@@ -557,6 +560,7 @@ typedef enum {
 #define jit_retval_i(u)                _jit_retval_i(_jit,u)
 #if __WORDSIZE == 32
 #  define jit_retval(u)                jit_retval_i(u)
+#  define jit_retval_ui(u)     jit_retval_i(u)
 #else
 #  define jit_retval(u)                jit_retval_l(u)
 #  define jit_retval_ui(u)     _jit_retval_ui(_jit,u)
diff --git a/lib/jit_arm.c b/lib/jit_arm.c
index 57c76a5..414dec4 100644
--- a/lib/jit_arm.c
+++ b/lib/jit_arm.c
@@ -1504,6 +1504,8 @@ _emit_code(jit_state_t *_jit)
                case_rr(ext, _uc);
                case_rr(ext, _s);
                case_rr(ext, _us);
+               case_rr(ext, _i);
+               case_rr(ext, _ui);
                case_rr(mov,);
            case jit_code_movi:
                if (node->flag & jit_flag_node) {
diff --git a/lib/jit_hppa.c b/lib/jit_hppa.c
index 98ef505..b179e9b 100644
--- a/lib/jit_hppa.c
+++ b/lib/jit_hppa.c
@@ -1050,6 +1050,8 @@ _emit_code(jit_state_t *_jit)
                case_rr(ext, _uc);
                case_rr(ext, _s);
                case_rr(ext, _us);
+               case_rr(ext, _i);
+               case_rr(ext, _ui);
                case_rr(hton, _us);
                case_rr(hton, _ui);
                case_rr(bswap, _us);
diff --git a/lib/jit_mips.c b/lib/jit_mips.c
index 77bf293..b1db9ae 100644
--- a/lib/jit_mips.c
+++ b/lib/jit_mips.c
@@ -1429,10 +1429,8 @@ _emit_code(jit_state_t *_jit)
                case_rr(ext, _uc);
                case_rr(ext, _s);
                case_rr(ext, _us);
-#if __WORDSIZE == 64
                case_rr(ext, _i);
                case_rr(ext, _ui);
-#endif
                case_rr(mov,);
            case jit_code_movi:
                if (node->flag & jit_flag_node) {
diff --git a/lib/jit_ppc.c b/lib/jit_ppc.c
index 5584c86..7b5f115 100644
--- a/lib/jit_ppc.c
+++ b/lib/jit_ppc.c
@@ -1347,10 +1347,8 @@ _emit_code(jit_state_t *_jit)
                case_rr(ext, _uc);
                case_rr(ext, _s);
                case_rr(ext, _us);
-#  if __WORDSIZE == 64
                case_rr(ext, _i);
                case_rr(ext, _ui);
-#  endif
                case_rr(hton, _us);
                case_rr(hton, _ui);
 #  if __WORDSIZE == 64
diff --git a/lib/jit_s390-cpu.c b/lib/jit_s390-cpu.c
index 53b2d0d..9897f86 100644
--- a/lib/jit_s390-cpu.c
+++ b/lib/jit_s390-cpu.c
@@ -1083,9 +1083,8 @@ static void 
_xori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
 #  define extr_uc(r0,r1)               LLGCR(r0,r1)
 #  define extr_s(r0,r1)                        LGHR(r0,r1)
 #  define extr_us(r0,r1)               LLGHR(r0,r1)
-#  if __WORDSIZE == 64
-#    define extr_i(r0,r1)              LGFR(r0,r1)
-#    define extr_ui(r0,r1)             LLGFR(r0,r1)
+#  define extr_i(r0,r1)                        LGFR(r0,r1)
+#  define extr_ui(r0,r1)               LLGFR(r0,r1)
 #  endif
 #  define ldr_c(r0,r1)                 LGB(r0,0,0,r1)
 #  define ldi_c(r0,i0)                 _ldi_c(_jit,r0,i0)
diff --git a/lib/jit_s390.c b/lib/jit_s390.c
index 83987de..dd42127 100644
--- a/lib/jit_s390.c
+++ b/lib/jit_s390.c
@@ -1161,10 +1161,8 @@ _emit_code(jit_state_t *_jit)
                case_rr(ext, _uc);
                case_rr(ext, _s);
                case_rr(ext, _us);
-#if __WORDSIZE == 64
                case_rr(ext, _i);
                case_rr(ext, _ui);
-#endif
                case_rr(mov,);
            case jit_code_movi:
                if (node->flag & jit_flag_node) {
diff --git a/lib/jit_sparc.c b/lib/jit_sparc.c
index 8b36f53..2d93b99 100644
--- a/lib/jit_sparc.c
+++ b/lib/jit_sparc.c
@@ -1473,10 +1473,8 @@ _emit_code(jit_state_t *_jit)
                case_rr(ext, _uc);
                case_rr(ext, _s);
                case_rr(ext, _us);
-#if __WORDSIZE == 64
                case_rr(ext, _i);
                case_rr(ext, _ui);
-#endif
                case_rr(mov,);
            case jit_code_movi:
                if (node->flag & jit_flag_node) {
diff --git a/lib/jit_x86-cpu.c b/lib/jit_x86-cpu.c
index 94dd4c1..eef4bbd 100644
--- a/lib/jit_x86-cpu.c
+++ b/lib/jit_x86-cpu.c
@@ -389,7 +389,10 @@ static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t);
 static void _extr_uc(jit_state_t*,jit_int32_t,jit_int32_t);
 #  define extr_s(r0, r1)               movsr(r0, r1)
 #  define extr_us(r0, r1)              movsr_u(r0, r1)
-#  if __X64 && !__X64_32
+#  if __X64_32
+#    define extr_i(r0,r1)              movr(r0,r1)
+#    define extr_ui(r0,r1)             movr(r0,r1)
+#  elif __X64
 #    define extr_i(r0, r1)             movir(r0, r1)
 #    define extr_ui(r0, r1)            movir_u(r0, r1)
 #  endif
diff --git a/lib/jit_x86.c b/lib/jit_x86.c
index b506577..718298a 100644
--- a/lib/jit_x86.c
+++ b/lib/jit_x86.c
@@ -1706,10 +1706,8 @@ _emit_code(jit_state_t *_jit)
                case_rr(ext, _uc);
                case_rr(ext, _s);
                case_rr(ext, _us);
-#if __X64 && !__X64_32
                case_rr(ext, _i);
                case_rr(ext, _ui);
-#endif
                case_rf(trunc, _f_i);
                case_rf(trunc, _d_i);
 #if __X64
diff --git a/lib/lightning.c b/lib/lightning.c
index fe03a4f..2003efb 100644
--- a/lib/lightning.c
+++ b/lib/lightning.c
@@ -3489,6 +3489,11 @@ _patch_register(jit_state_t *_jit, jit_node_t *node, 
jit_node_t *link,
     }
 }
 
+#if __WORDSIZE == 32
+#  define extr_i(r0,r1)                        movr(r0,r1)
+#  define extr_ui(r0,r1)               movr(r0,r1)
+#endif
+
 #if __BYTE_ORDER == __LITTLE_ENDIAN
 #  define htonr_us(r0,r1)              bswapr_us(r0,r1)
 #  define htonr_ui(r0,r1)              bswapr_ui(r0,r1)
-- 
2.30.2




reply via email to

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